2016-05-12 4 views
-1

私はPL/SQLの新機能です。誰かが私に次のシナリオを解決するのを助けることができますか? emp_id、full_name、department_id、total_salaryのような従業員の詳細を取得する方法郵便番号を入力パラメータとしてプロシージャに渡す場合。 1つのテーブルから従業員の詳細に手続きを書く方法はわかっていますが、ここでは3つのテーブルを使用する必要があります。 誰でも助けてくれますか? また、私は親切に上記のクエリは私に必要な結果を与えるなら、私に知らせてoracleのプロシージャで複数の表を使用する

Create or Replace Procedure P1(postal_cd varchar2) 
as 
    v_empid number; 
    v_name  varchar2(20); 
    v_dept_Id number(10); 
    v_dept_nm varchar2(10); 
    v_hiredate date; 
    v_sal  number; 
begin 
    select e.emp_id 
      , e.full_name||' '||e.last_name 
      , e.department_id 
      , d.department_name 
      , e.hiredata 
      , sum(e.sal) salary 
     into v_empid 
      , v_name 
      , v_dept_id 
      , v_dept_nm 
      , v_hiredate 
      , v_sal 
     from employees e 
inner join departments d 
     on e.department_id = d.department_id 
inner join locations l 
     on d.location_id = l.location.id 
     where l.postal_code = postal_cd 
      ; 
end; 

を使用しているコードを提供しています。前もって感謝します。

+3

なぜ実行しないのですか?それを自分で確認してください。それは正しいようです。 –

+0

コードに問題があります。たとえば、次の文は構文的に正しくありません。 (d.location_id = l.location.id上)。 l.location_idである必要があります。また、グループなしでsum(e.sal)を実行しています。あなたの完全な要件を述べてください。私はあなたが特定の郵便番号に属する従業員の詳細を表示したいと思います。その場合、カーソルベースのアプローチに進む必要があります。また、トータルサラとはどういう意味ですか? employees表のsalカラムには、従業員の合計salを格納する必要があります。あなたは、部署、住所または郵便番号の合計のサルが欲しいですか? –

+0

ありがとうございます。この質問は私が練習している練習の一部でした。 @phonetic_man、はい私は特定の郵便番号に属する従業員の詳細を表示する必要があります。私は練習で述べた総給与と混同しています。従業員一人当たりの総給与だけなので、集計してグループを使用する必要はありません。 –

答えて

0

特定の郵便番号に属する従業員の詳細を表示したいので、次のコードが役立ちます。

CREATE OR REPLACE PROCEDURE p1(postal_cd VARCHAR2) 
AS 
    v_empid NUMBER; 
    v_name  VARCHAR2(20); 
    v_dept_Id NUMBER(10); 
    v_dept_nm VARCHAR2(10); 
    v_hiredate DATE; 
    v_sal  NUMBER; 

    CURSOR cur_employee 
    IS 
    SELECT e.emp_id, 
      e.full_name||' '||e.last_name AS emp_full_name, 
      e.department_id, 
      d.department_name, 
      e.hiredata, 
      e.sal 
    INTO v_empid, 
      v_name, 
      v_dept_id, 
      v_dept_nm, 
      v_hiredate, 
      v_sal 
    FROM employees e 
    INNER JOIN departments d ON e.department_id = d.department_id 
    INNER JOIN locations l ON d.location_id = l.location_id 
    WHERE l.postal_code = postal_cd; 


BEGIN 

    FOR c_employee IN cur_employee 
    LOOP 
     DBMS_OUTPUT.PUT_LINE(c_employee.emp_full_name || ' ' ||c_employee.department_id||' '||c_employee.department_name||' '||c_employee.hiredata ||' ' || c_employee.sal); 
    END LOOP; 

END; 
関連する問題