2016-05-04 7 views
-2

Ich muss eine gespeicherte Datenbankprozedur mit einem Eingabeparameter für employee_id für die gespeicherte Prozedur und zwei Ausgabeparameter entwickeln. Eine für den Rückgabecode und eine weitere für die Rückmeldung.Erstellen von Logik in einer gespeicherten Prozedur, um die Gültigkeit der Mitarbeiter-ID zu überprüfen

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; 

Wenn die Mitarbeiternummer gültig ist, 1 Rückgabecode zurückgegeben und als Rückmeldung zu: "Employee is valid and his total salary is : "

Wenn nicht zurück Code -1 und die Rückmeldung als "Employee Number is not valid:"

+0

Sie sollten Ihre Frage mit der von Ihnen verwendeten Datenbank versehen. Es ist offensichtlich Oracle, also habe ich dieses Tag hinzugefügt. –

+0

Es gibt absolut keinen Grund zum SHOUT hier. Wir können alle gut lesen, und SCHREIEN wird deine Frage nicht früher beantworten. Die Eingabe des Fragetitels in ALL CAPS ist unhöflich und extrem nervig. Bitte hör jetzt auf. –

+0

Haben Sie eine spezifische Frage? – OldProgrammer

Antwort

0

Sie sein muss kann Spaltenwerte nicht mit einem Variablenwert vergleichen, ohne den Wert der Spalte in einer Variablen abzurufen (EMPLOYEE_ID = emp_id). Darüber hinaus gibt es weitere Syntaxfehler in Ihrem Code. Probier diese.

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; 

Hier ist, wie Sie es testen können. Ersetzen Sie den ersten Parameter durch die Mitarbeiternummer.

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

Vielen Dank Mann, schätze deine Hilfe so sehr! –

Verwandte Themen