2016-05-04 4 views
-2

Мне нужно разработать хранимую процедуру базы данных с входным параметром для 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:"

+0

Вы должны пометить свой вопрос в базе данных, которую используете. Очевидно, это Oracle, поэтому я добавил этот тег. –

+0

Здесь абсолютно никакой причины для SHOUT. Мы все хорошо читаем, и ОБРАТНАЯ СВЯЗЬ не ответит на ваш вопрос раньше. Ввод заголовка вашего вопроса во ВСЕХ CAPS является грубым и крайне раздражающим. Пожалуйста, остановитесь сейчас. –

+0

У вас есть конкретный вопрос? – OldProgrammer

ответ

0

You не может сравнивать значения столбцов с переменным значением без получения значения столбца в переменной (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; 
+0

Спасибо, много человек. Цените свою помощь! –