토트에서의 프로시저 호출 Error. 0 2 2,504

by 넝쿨당 [Toad] [2013.07.08 12:21:16]


프로시저 관련 질문입니다.
제가 아래와 같이 프로시저를 생성하고, 파라미터를 넘겨서 결과를 받으려고 합니다.
근데 토드에서 프로시저를 실행을 하면 

=================================================
BEGIN sel_empno(100, :var_name, :var_sal, :var_job); END;
Error at line 1
ORA-01008: not all variables bound
=================================================

이러한 ERROR가 뜨더군요. 
그리고 oracle이 설치된 서버에 직접 붙어 실행을 하면 

=================================================
PL/SQL procedure successfully completed.
=================================================

이렇게 잘 됩니다. 왜그럴까요? 
CREATE OR REPLACE procedure sel_empno
(
    vempno IN employees.employee_id%TYPE,
    vename OUT employees.first_name%TYPE,
    vsal OUT employees.salary%TYPE,
    vjob OUT employees.job_id%TYPE
)
IS
BEGIN
    select first_name, salary, job_id into vename, vsal, vjob
    from employees
    where employee_id = vempno;
      
END;
/

variable var_name varchar2(50);
variable var_sal number;
variable var_job varchar2(20);
execute sel_empno(100, :var_name, :var_sal, :var_job);
by 마농 [2013.07.08 12:58:22]
그냥 EXEC 할 때와 PL/SQL 블럭 안에서 호출할때는 문법이 달라요.
또한, 각 프로그래밍 언어마다 호출방식이 약간씩 차이가 있겠죠.

-- 1. SQLPlus EXEC 호출 --
SQL> var var_name VARCHAR2(10)
SQL> var var_sal NUMBER
SQL> var var_job VARCHAR2(10)
SQL> EXEC sel_empno(100, :var_name, :var_sal, :var_job);
SQL> print var_name
SQL> print var_sal
SQL> print var_job

-- 2. PL/SQL 호출 --
DECLARE
    var_name employees.first_name%TYPE;
    var_sal employees.salary%TYPE;
    var_job employees.job_id%TYPE;
BEGIN
    sel_empno(100, var_name, var_sal, var_job);
    dbms_output.put_line(var_name);
    dbms_output.put_line(var_sal);
    dbms_output.put_line(var_job);
END;
/

by 손님 [2013.07.08 13:05:36]
마농님~ 답변 감사합니다.
이제 PL/SQL 시작하는데.. 그런 차이가 있었군요. ^^;;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입