본문 바로가기

Oracle/Function in SQL*Plus

Function, Procedure call on SQL*Plus

SQL*Plus에서 Stored Procedure를 작성하고 호출하는 예제

SQL>set serveroutput on;
SQL>create or replace procedure proc01(
           num IN number, msg OUT varchar2) /* 파라미터는 IN, OUT, INOUT중 하나이며 디폴트 IN */
        is
        begin
           msg := 'Hello World';
           dbms_output.put_line('입력된 값(num=' ||num||')');
        end;
        /

SQL>var str varchar2(20);
SQL>exec proc01(10, :str);
SQL>print str;





SQL*Plus에서 Oracle 함수(function)를 작성하고 호출하는 예

함수도 프로시저와 동일하게 파라미터의 모드를 IN, OUT, INOUT으로 할수도 있지만 함수는 return문장을 이용하여 값을 전달할 수 있기 때문에 OUT파라미터보다는 return문장을 사용하는 것이 일반적이다.

SQL>create or replace function func01(
           num number, msg varchar2)  /* 파라미터는 IN, OUT, INOUT중 하나이며 디폴트 IN */
           return varchar2
        is
        begin
          -- PL/SQL block
          return 'Hello Function'; /* 함수는 반드시 return 문장이 필요함 */
        end;
        /

SQL>var result varchar2(20);
SQL>exec :result := func01(10,'Test');
SQL>print result;

작성된 Oracle 함수는 다음과 같이 SQL문장안에서도 호출할 수 있다
SQL>select func01(10,'test') from dual;


Stored Procedure에서 CURSOR를 리턴하고 SQL*Plus에서 출력하는 예

오라클의 커서는 SQL*Plus에서는 REFCURSOR로 표현되고,
PL/SQL에서는 SYS_REFCURSOR로 표현된다.

SQL> create or replace procedure proc01(
          dept_no IN emp.deptno%type, refc OUT sys_refcursor)
          is
          begin
          open refc for
          select * from emp where deptno=dept_no;
          end;
          /

SQL> var cur refcursor;
SQL> exec proc01(10, :cur);

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> print cur;

     EMPNO ENAME      JOB             MGR  HIREDATE     SAL     COMM   DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7782    CLARK      MANAGER     7839    81/06/09       2450                     10
      7839    KING       PRESIDENT               81/11/17       5000                     10
      7934    MILLER     CLERK           7782   82/01/23       1300                     10





Oracle 함수에서 커서를 리턴하여 SQL*Plus에서 출력하는 예

오라클의 커서는 SQL*Plus에서는 REFCURSOR로 표현되고,
PL/SQL에서는 SYS_REFCURSOR로 표현된다.

SQL>  create or replace function func01(
           dept_no emp.deptno%type)
           return sys_refcursor
           is
           refc sys_refcursor;
           begin
           open refc for
           select * from emp where deptno=dept_no;
           return refc;
           end;
SQL> /

함수가 생성되었습니다.

SQL> var cur refcursor;
SQL> exec :cur := func01(10);

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> print cur;

     EMPNO ENAME      JOB             MGR  HIREDATE     SAL     COMM   DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7782    CLARK      MANAGER     7839     81/06/09       2450                     10
      7839    KING       PRESIDENT                81/11/17       5000                     10
      7934    MILLER     CLERK           7782    82/01/23       1300                     10