ВЫВОД СУБД PL/SQL.PUT_LINE

#plsql

Вопрос:

у меня проблема с DBMS_OUTPUT.PUT_LINE я сделал 2 из них, один должен отображаться до обновления зарплаты и один после обновления зарплаты, но оба они показывают мне только обновление, если я что-то не так, проверьте код, пожалуйста .

 CREATE OR REPLACE PROCEDURE SET_SALARY (P_EMP_ID NUMBER , P_ADD_SAL NUMBER)
 IS 
V_NAME VARCHAR2(50) ;
V_SALARY NUMBER ;
V_MANG_NAME VARCHAR2(50); 
V_MANG_SAL NUMBER ;
V_EMP_ID NUMBER ;
V_MNG_ID NUMBER ;
BEGIN 
SELECT LAST_NAME , SALARY  
INTO  V_NAME , V_SALARY 
FROM EMPLOYEES
WHERE EMPLOYEE_ID = P_EMP_ID ;
DBMS_OUTPUT.PUT_LINE (V_NAME || ' Before: '||V_SALARY );  <===(must show for select)
UPDATE EMPLOYEES
SET SALARY = SALARY   P_ADD_SAL
WHERE EMPLOYEE_ID = P_EMP_ID ;
DBMS_OUTPUT.PUT_LINE (V_NAME || ' After: '||V_SALARY ); <==(must show after update)
SELECT E.EMPLOYEE_ID , E.LAST_NAME, E.SALARY ,E.MANAGER_ID,M.LAST_NAME , M.SALARY  
INTO V_EMP_ID, V_NAME , V_SALARY ,V_MNG_ID,V_MANG_NAME , V_MANG_SAL 
FROM EMPLOYEES E , EMPLOYEES M 
WHERE E.MANAGER_ID = M.EMPLOYEE_ID 
AND E.EMPLOYEE_ID = P_EMP_ID ;
DBMS_OUTPUT.PUT_LINE (V_MANG_NAME || ' Before: '||V_MANG_SAL );<===(must show for select)
UPDATE EMPLOYEES 
SET SALARY = SALARY    ( P_ADD_SAL / 2 ) 
WHERE EMPLOYEE_ID = V_MNG_ID ;
DBMS_OUTPUT.PUT_LINE (V_MANG_NAME || ' AFTER: '||V_MANG_SAL );<==(must show after update)
END ;
 

Ответ №1:

Ваша проблема в том, что вы никогда не обновляете значения переменных V_SALARY и V_MANG_SAL после начальных SELECT INTO операторов.

Если вы хотите это сделать, вам нужно добавить RETURNING предложение в свои инструкции по обновлению. Возьмем в качестве примера первый:

 UPDATE EMPLOYEES
SET SALARY = SALARY   P_ADD_SAL
WHERE EMPLOYEE_ID = P_EMP_ID 
RETURNING salary INTO v_salary;
 

Это приведет к обновлению значения в переменной V_SALARY с помощью обновленного значения.