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