Построение логики внутри хранимой процедуры для проверки правильности идентификатора сотрудника
Мне нужно разработать хранимую процедуру базы данных с входным параметром для employee_id
к хранимой процедуре и двум выходным параметрам. Один для кода возврата, а другой для сообщения возврата.
CREATE OR REPLACE PROCEDURE CHECK_ID (emp_id IN INT,
out_status OUT INT,
out_msg OUT VARCHAR
)
AS
BEGIN
DECLARE
emp_salary INTEGER;
BEGIN
SELECT SALARY INTO emp_salary FROM EMPLOYEES
WHERE EMPLOYEE_ID = emp_id;
IF EMPLOYEE_ID = emp_id
THEN
out_status := 1;
out_msg:= 'Employee is valid and his total salary is :'|| emp_salary;
ELSE
out_status :=0;
--out_msg :=
DBMS_OUTPUT.PUT_LINE('Employee Number' || emp_id || 'is not valid') ;
END IF;
END;
Если номер сотрудника действителен, код возврата 1
должен быть возвращен и вернуть сообщение как: "Employee is valid and his total salary is : "
Если нет, код возврата должен быть -1
и ответное сообщение как "Employee Number is not valid:"
1 ответ
Вы не можете сравнивать значения столбца со значением переменной без извлечения значения столбца в переменной (EMPLOYEE_ID = emp_id). Кроме того, в вашем коде есть другие синтаксические ошибки. Попробуй это.
CREATE OR REPLACE PROCEDURE check_id
(
emp_id IN INTEGER,
out_status OUT INTEGER,
out_msg OUT VARCHAR2
)
AS
emp_salary INTEGER;
emp_found BOOLEAN;
BEGIN
emp_found := FALSE;
BEGIN
SELECT salary INTO emp_salary
FROM employees
WHERE employee_id = emp_id;
emp_found := TRUE;
EXCEPTION
WHEN NO_DATA_FOUND THEN
emp_found := FALSE;
END;
IF emp_found = TRUE THEN
out_status := 1;
out_msg:= 'Employee is valid and his total salary is : '|| emp_salary;
ELSE
out_status := 0;
out_msg := 'Employee Number ' || emp_id || ' is not valid';
END IF;
END;
Вот как вы можете это проверить. Замените первый параметр номером сотрудника.
DECLARE
v_status INTEGER;
v_msg VARCHAR2(1000);
BEGIN
check_id (1,v_status,v_msg);
DBMS_OUTPUT.PUT_LINE(v_status || ' ' || v_msg);
END;