Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Aktualisieren einer Tabelle in Oracle, wenn ein Feldwert Null ist, und Feststellen, dass die Aktualisierung erfolgreich ist

Möglicherweise müssen Sie das tun Aktualisieren Sie bestimmte Felder einer Tabelle oder alle Felder, wenn ihre Werte null sind, nur sonst besteht keine Notwendigkeit, ein Feld zu aktualisieren. Unten ist das Beispielverfahren für denselben Zweck in der HR.Employees-Tabelle geschrieben:CREATE OR REPLACE PROCEDURE HR.UpdateEmpIfNull ( PN_EMPLOYEE_ID IN NUMBER, PV_FIRST_NAME IN VARCHAR2, PV_LAST_NAME IN VARCHAR2, PV_EMAIL IN VARCHAR2, PV_PHONE_NUMBER IN VARCHAR2, PD_HIRE_DATE IN DATE, PV_JOB_iD IN VARCHAR2, PN_GEHALT IN ZAHL, PV_Erfolg AUS VARCHAR2)IS n_length ZAHL; n_length2 NUMBER;BEGIN SELECT LENGTH( VORNAME || NACHNAME || E-MAIL || PHONE_NUMBER || HIRE_DATE || JOB_ID || GEHALT) INTO n_length FROM HR.EMPLOYEES WHERE EMPLOYEE_ID =PN_EMPLOYEE_ID; UPDATE HR.EMPLOYEES SET FIRST_NAME =DECODE (FIRST_NAME, NULL, PV_FIRST_NAME, FIRST_NAME), LAST_NAME =DECODE (LAST_NAME, NULL, pv_LAST_NAME, LAST_NAME), EMAIL =DECODE (EMAIL, NULL, pv_EMAIL, EMAIL), PHONE_NUMBER =DECODE (PHONE_NUMBER, NULL, pv_PHONE_NUMBER, PHONE_NUMBER), HIRE_DATE =DECODE (HIRE_DATE, NULL, pD_HIRE_DATE, HIRE_DATE), JOB_ID =DECODE (JOB_ID, NULL, pV_JOB_ID, JOB_ID), SALARY =DECODE (GEHALT, NULL, pN_GEHALT, GEHALT) WHERE EMPLOYEE_ID =PN_EMPLOYEE_ID; /* Wenn Sie die folgende Abfrage verwenden, um festzustellen, ob die Aktualisierung erfolgreich war, können wir hier nicht sql%rowcount oder sql%found verwenden, um festzustellen, da bei korrekter Mitarbeiter-ID immer eine erfolgreiche Aktualisierung angezeigt wird, aber wir müssen feststellen, ob ein Nullfeld vorhanden ist Wert wurde aktualisiert oder nicht */ SELECT LENGTH( VORNAME || NACHNAME || E-MAIL || PHONE_NUMBER || HIRE_DATE || JOB_ID || GEHALT) INTO n_length2 FROM HR.EMPLOYEES WHERE EMPLOYEE_ID =PN_EMPLOYEE_ID; IF n_length2> n_length THEN --- Änderungen speichern. BEGEHEN; Pv_Erfolg :='Y'; ELSE ROLLBACK; pv_success :='N'; ENDE IF; AUSNAHME WENN ANDERE DANN Pv_Success :='N'; ZURÜCK;ENDE;/