Oracle
 sql >> Base de données >  >> RDS >> Oracle

Mise à jour d'une table dans Oracle si une valeur de champ est nulle et détermination de la réussite de la mise à jour

Vous devrez peut-être mettre à jour les champs particuliers d'une table ou tous les champs si leurs valeurs sont nulles, sinon il n'est pas nécessaire de mettre à jour un champ. Vous trouverez ci-dessous l'exemple de procédure dans le même but écrit sur la table HR.Employees :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_SALARY IN NUMBER, PV_Success OUT VARCHAR2)IS n_length NUMBER ; n_length2 NUMBER;BEGIN SELECT LENGTH( FIRST_NAME || LAST_NAME || EMAIL || PHONE_NUMBER || HIRE_DATE || JOB_ID || SALARY) INTO n_length FROM HR.EMPLOYEES WHERE EMPLOYEE_ID =PN_EMPLOYEE_ID ; MISE À JOUR 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), SALAIRE =DECODE (SALAIRE, NULL, pN_SALARY, SALAIRE) WHERE EMPLOYEE_ID =PN_EMPLOYEE_ID ; /* En utilisant la requête ci-dessous pour déterminer si la mise à jour a réussi, nous ne pouvons pas utiliser ici sql%rowcount ou sql%found pour déterminer car si l'identifiant de l'employé est correct, il affichera toujours une mise à jour réussie, mais nous devons déterminer si un champ nul la valeur a été mise à jour ou non */ SELECT LENGTH( FIRST_NAME || LAST_NAME || EMAIL || PHONE_NUMBER || HIRE_DATE || JOB_ID || SALAIRE) DANS n_length2 FROM HR.EMPLOYEES WHERE EMPLOYEE_ID =PN_EMPLOYEE_ID ; SI n_longueur2> n_longueur ALORS --- Enregistrer les modifications. COMMETTRE; Pv_Succès :='O'; AUTREMENT ROLLBACK ; pv_succès :='N'; FIN SI;EXCEPTION QUAND AUTRES ALORS Pv_Success :='N'; ROLLBACK;FIN;/