簡體   English   中英

從 Oracle 過程中的 2 個 select 語句返回值

[英]Returning values from 2 select statements in Oracle Procedure

我堅持的家庭作業問題。

我需要創建一個名為 dept_info 的過程,其中部門 id 作為 IN 參數,該部門經理的部門名稱和全名(名字和姓氏的連接)作為要傳遞回調用程序的 OUT 參數。 該程序應在 PL SQL 塊內。

需要使用兩個表:departments 包含部門 ID、部門名稱和經理 ID,以及 employees 表,其中包含員工 ID(與經理 ID 相同)、名字和姓氏。

可執行部分應打印出部門 ID 100 的信息。

到目前為止,我的代碼是:

DECLARE
    dept_id departments.department_id%TYPE;
    dept_name VARCHAR(30);
    mgr_id NUMBER(4);
    full_name VARCHAR(100);

    PROCEDURE dept_info(
    dep_id IN departments.department_id%TYPE,
    dep_name OUT departments.department_name%TYPE,
    full_name OUT employees.first_name%TYPE)
    IS
    BEGIN
        SELECT department_name, manager_id INTO dept_name, mgr_id FROM DEPARTMENTS WHERE department_id = dept_id;
        SELECT first_name || ' ' || last_name AS full_name INTO full_name FROM EMPLOYEES WHERE employee_id = mgr_id;
    END dept_info;
BEGIN
    dept_info(100, dept_name, full_name);
    DBMS_OUTPUT.PUT_LINE(dept_id || dept_name || full_name);
END;
    

這將返回“未找到數據”,這意味着我的 SELECT 和 INTO 語句中的數據無法正常工作。 任何幫助我指出正確方向的幫助表示贊賞。

更清晰的變量命名會有所幫助,但最后我在 SELECT 語句中使用了不正確的變量。 正確代碼:

DECLARE
    dept_id departments.department_id%TYPE := 100;
    dept_name VARCHAR(30);
    mgr_id NUMBER(4);
    full_name VARCHAR(46);
    PROCEDURE dept_info(
    dep_id IN departments.department_id%TYPE,
    dep_name OUT departments.department_name%TYPE,
    full_name OUT employees.first_name%TYPE)
    IS
    BEGIN
        SELECT department_name, manager_id INTO dep_name, mgr_id FROM DEPARTMENTS WHERE department_id = dep_id;
        SELECT first_name || ' ' || last_name AS full_name INTO full_name FROM EMPLOYEES WHERE employee_id = mgr_id;
    END dept_info;
BEGIN
    dept_info(100, dept_name, full_name);
    DBMS_OUTPUT.PUT_LINE(dept_id || dept_name || full_name);
END;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM