2017-12-02 9 views
-2

だから私は、このSELECT文を持っている:私は、キーボードからの従業員の名前を入力するとoracleでプロシージャを開始するには?

 SELECT emp.emp_name, pos_emp.POSITION_NAME 
    from EMPLOYEE emp 
    join POSITION_EMPLOYEE pos_emp 
    on emp.POSITION_EMPLOYEE_POSITION_ID=pos_emp.POSITION_ID 
    where emp.EMP_NAME='&employee_name'; 

それは私(POSITION_EMPLOYEEテーブルから)彼(EMPLOYEE表の)名前と位置を返します。しかし、私は、ストアドプロシージャでこれをしたい:

create or replace PROCEDURE emp_pos( EMPLOYEE_NAME IN EMPLOYEE.EMP_NAME%TYPE, 
             POSITION_NAME OUT POSITION_EMPLOYEE.POSITION_NAME%TYPE) 
AS 
BEGIN 
    SELECT pos_emp.POSITION_NAME 
    INTO 
     POSITION_NAME 
    FROM EMPLOYEE emp 
     JOIN 
      POSITION_EMPLOYEE pos_emp 
      ON 
       emp.POSITION_EMPLOYEE_POSITION_ID 
       = pos_emp.POSITION_ID 
    WHERE emp.EMP_NAME 
      = EMPLOYEE_NAME 
    ; 

END; 

私は手順を開始しようとしています開始:コンパイラは私にエラーを与える

begin emp_pos('&employee_name'); 
end; 

'への呼び出しで間違った番号または引数の型をEMP_POS 'どこが間違っていますか?

+0

使用は '( '&enter_name')emp_posを開始します。最後に 'パラメータを引用符で囲みます。 – krokodilko

+0

@krokodilkoまだ同じエラーです。 – Freak0345

+0

プロシージャには、最初のIN、2番目のOUTという2つのパラメータがあります。したがって、 'DECLARE my_out_param VACHAR2(100); BEGIN emp_pos( '&enter_name'、my_out_param); 'BEGIN ... ENDブロックにもDBMS_OUTPUT.PUT_LINE(my_out_param);を追加します。 – krokodilko

答えて

0
SQL>set serveroutput on; 
SQL> create or replace PROCEDURE emp_pos( EMPLOYEE_NAME IN EMPLOYEE.EMP_NAME%TYPE, 
             POSITION_NAME OUT POSITION_EMPLOYEE.POSITION_NAME%TYPE) 
AS 
BEGIN 
    SELECT pos_emp.POSITION_NAME 
    INTO 
     POSITION_NAME 
    FROM EMPLOYEE emp 
     JOIN 
      POSITION_EMPLOYEE pos_emp 
      ON 
       emp.POSITION_EMPLOYEE_POSITION_ID 
       = pos_emp.POSITION_ID 
    WHERE emp.EMP_NAME 
      = EMPLOYEE_NAME 
    ; 
    dbms_output.put_line(EMPLOYEE_NAME||'''s position is : '||POSITION_NAME); 
END; 

この手順を定義した後、あなたがこの方法で使用することができます:

SQL>var v_emp_pos varchar2; 
SQL>exec emp_pos('&employee_name',:v_emp_pos); 
SQL>print v_emp_pos; -- just to print out this "out" parameter. 
+0

返事をありがとう。あなたも従業員の名前をエクスポートしますか? EMPLOYEE_NAMEをdbms_output.put_lineに配置することはできません( 'Your Position is:' | POSITION_NAME);私が関数を開始するとき、それらはエラーです:間違った数または引数の型。 – Freak0345

+0

@ Freak0345私は電話をするとき、私は外のパラメータを気にしなかった。それは今です。 –

+0

もう1つの憂慮:2​​人のポジションを持つ1人の従業員(複数のレコード)がある場合はどうなりますか?私はそれが理にかなっていないことを知っています...どのように彼の名前と位置ですべての レコードをエクスポートする。私はループを試しましたが、うまくいきません:LOOP DBMS_OUTPUT.PUT_LINE(EMPLOYEE_NAME || ''の位置は '|| POSITION_NAME); END LOOP; – Freak0345

関連する問題