Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Atualizando uma tabela no Oracle se algum valor de campo for nulo e determinar se a atualização foi bem-sucedida

Pode ser necessário atualize os campos específicos de uma tabela ou todos os campos se seus valores forem nulos, senão não há necessidade de atualizar nenhum campo. Abaixo está o exemplo de procedimento para o mesmo propósito escrito na tabela 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_D IN DATE 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; 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 (SALARY, NULL, pN_SALARY;MPLOY;MPLOY) WHERE EMPLOYEE_ID =PN_EMPLOY /* Usando a consulta abaixo para determinar se a atualização foi bem-sucedida, não podemos usar aqui sql%rowcount ou sql%found para determinar porque se o ID do funcionário estiver correto, ele sempre mostrará uma atualização bem-sucedida, mas precisamos determinar se algum campo nulo valor foi atualizado ou não */ SELECT LENGTH( FIRST_NAME || LAST_NAME || EMAIL || PHONE_NUMBER || HIRE_DATE || JOB_ID || SALÁRIO) EM n_length2 DE HR.EMPLOYEES WHERE EMPLOYEE_ID =PN_EMPLOYEE_ID; IF n_length2> n_length THEN --- Salvar alterações. COMPROMETER-SE; Pv_Success :='S'; ELSE ROLLBACK; pv_success :='N'; END IF;EXCEÇÃO QUANDO OUTROS THEN Pv_Success :='N'; ROLLBACK;END;/