私は、すべての従業員に関する情報を取得するための単純なストアドプロシージャを作成していますが、パラメータ渡しの場合、2人のパラメータを追加して1人の従業員だけを取得します。私の意図はカーソルを作成し、パラメータを使用してWHEREに条件を追加することですが、現在は機能していません。あなたは何か考えていますか?ありがとう!どのようにこの手順でWHERE条件内でCase句を使用できますか?
- 最初のパラメータは従業員IDです。
- 第2パラメータは給与を引き上げるためのものです。
手順は次のとおりです。昇給の給与について
CREATE OR REPLACE PROCEDURE test6(
p_empid empleados.legajo%TYPE := NULL,
p_raise_salary empleados.sueldo_basico%TYPE := NULL)
IS
CURSOR c_emps
IS
SELECT legajo, apellido, nombre, fecha_alta, sueldo_basico,
(CASE
WHEN p_raise_salary IS NOT NULL THEN
sueldo_basico * p_raise_salary
ELSE
sueldo_Basico
END) aumento_sueldo_basico
FROM empleados
WHERE (legajo = p_empid AND fecha_alta IS NOT NULL)
OR fecha_alta IS NOT NULL;
BEGIN
FOR i IN c_emps
LOOP
DBMS_OUTPUT.PUT_LINE(
'NOMBRE: ' || i.apellido || ' ' || i.nombre || ' ' || i.legajo);
DBMS_OUTPUT.PUT_LINE(
'Antiguo Sueldo: ' || i.sueldo_basico);
DBMS_OUTPUT.PUT_LINE(
'Nuevo Sueldo: ' || i.aumento_sueldo_basico);
EXIT WHEN c_emps%NOTFOUND;
END LOOP;
END test6;
2番目のパラメータが動作しているが、私はidパラメータの値を追加するときに、現在のすべての従業員情報を表示しています。
ないだろうが、 'WHERE(legajo = p_empid OR p_empid:
このバージョンでは、重複を削除しますIS NULL)AND(fecha_altaはNULLではありません); –
お返事ありがとうJustin。私はそれを試したが、動作していない! –
legajoとfetch_altaは英語で何ですか? – maSTAShuFu