PL SQL

PL/SQL 프로시저 사용 시 주의 사항

n.han 2016. 7. 7. 10:35

- 주의 사항

1) DEFAULT 파라미터 사용 시 인수 전달에 주의해야 한다.

CREATE OR REPLACE PROCEDURE INST_SALE

(P_PRODID                   NUMBER,

 P_CUSTID                   NUMBER,

 P_TIMEID                   VARCHAR2 := TO_CHAR(SYSDATE,'YYYYMMDD'),

P_CHNNID                 NUMBER   := 3 ,

 P_QTY                       NUMBER   := 1 ,

 P_AMT                      NUMBER)

 

-- ERROR; , , 자체가 ERROR
EXECUTE INST_SALE(100, 100, , , , 100);
-- ERROR; 위치 지정 방식이라 P_AMT에 값이 들어가지 않음
EXECUTE INST_SALE(100, 100, 100);
-- ERROR; <=가 아니라 =>
EXECUTE INST_SALE(100, 100, P_AMT <= 100);
-- ERROR; 이름 지정 방식을 쓰다가 위치 지정 방식을 쓰면 무조건 에러
EXECUTE INST_SALE(P_PRODID => 33, 1500, 1000);
-- GOOD
EXECUTE INST_SALE(100, 100 ,P_AMT => 100);

 

 

 

2) 파라미터는 절대로 뒤에 데이터 타입의 크기나 정밀도를 지정하지 않는다. 지정 시 에러를 발생 시킨다.

 

   3) 파라미터 OUT 모드에서, 프로시저를 호출 시 OUT되는 값을 받을 변수(공간)가 필요하다.  이를 상수로 넘기게 되면 받을 수 있는 공간이 없기 때문에 에러를 발생 시킨다. 또한 프로시저에서 IN OUT, OUT 모드로 선언된 파라미터에는 DEFAULT를 적용할 수 없다.

 

CREATE OR REPLACE PROCEDURE proc1(

    p1 OUT NUMBER)

IS

BEGIN

  p1 := 10;

END proc1;

/

-- Error

EXECUTE proc1(1);

-- Success

VARIABLE b1 NUMBER;

EXECUTE proc1(p1 => :b1);

CREATE OR REPLACE PROCEDURE proc1(

    p1 OUT NUMBER := 1)

IS

BEGIN

  p1 := 10;

END proc1;

/

오류(2,5): PLS-00230: OUT and IN OUT formal parameters may not have default expressions