1. PL/SQL 에서의 함수 사용

 

ex1)단일행 함수 사용.

SET SERVEROUTPUT ON

 DECLARE

                v_desc_size INTEGER(5);

                v_prod_description VARCHAR2(70) := 'You can use this product with your radios for higher frequency';

 BEGIN

                v_desc_size := LENGTH(v_prod_description) ;

                DBMS_OUTPUT.PUT_LINE (v_desc_size) ;

END ;

/

 62

PL/SQL procedure successfully completed.

 

ex2)그룹함수는 scalar type에 사용될 수 없다.

DECLARE

                v_desc_size INTEGER(5);

                v_prod_description VARCHAR2(70) := 'You can use this product with your radios for higher frequency';

BEGIN

                v_desc_size := MAX(v_prod_description) ;

                DBMS_OUTPUT.PUT_LINE (v_desc_size) ;

END ;

/

ERROR at line 5:

ORA-06550: line 5, column 18:

PLS-00204: function or pseudo-column 'MAX' may be used inside a SQL statement only

ORA-06550: line 5, column 3:

PL/SQL: Statement ignored

 

ex3)그룹함수가 SELECT 명령어와 함께 쓰이면 사용가능하다.

DECLARE

         v_sum NUMBER ;

BEGIN

         SELECT SUM(sal) INTO v_sum

FROM emp ;

                DBMS_OUTPUT.PUT_LINE (v_sum) ;

END ;

/

29025

PL/SQL procedure successfully completed.

 

2. PL/SQL 에서 SEQUENCE 사용

 

ex1) 11g부터 제공됨.

SQL> CREATE SEQUENCE empno_seq START WITH 1000 ;

SQL> SET SERVEROUTPUT ON

DECLARE

                v_num NUMBER := empno_seq.NEXTVAL ;

BEGIN

                DBMS_OUTPUT.PUT_LINE ( v_num ) ;

END ;

/

 1000

 

ex2)

DECLARE

                 v_num NUMBER ;

BEGIN

                SELECT empno_seq.NEXTVAL INTO v_num

                FROM dual ;

                DBMS_OUTPUT.PUT_LINE ( v_num ) ;

END ;

/

1001

PL/SQL procedure successfully completed.

 

중첩 블록에서 변수의 범위

 

ex1) 상위 블럭에서 선언된 변수는 하위변수에서 참조가 가능하다.

SET SERVEROUTPUT ON

DECLARE

                v_outer VARCHAR2(100) := 'Outer Variable' ;

BEGIN

                DBMS_OUTPUT.PUT_LINE ('Outer : ' || v_outer ) ;

                           DECLARE

                                       v_inner VARCHAR2(100) := 'Inner Variable' ;

                           BEGIN

                                        DBMS_OUTPUT.PUT_LINE ('Outer : ' || v_outer ) ;

                                        DBMS_OUTPUT.PUT_LINE ('Inner : ' || v_inner) ;

                        END ;

DBMS_OUTPUT.PUT_LINE ('Outer : ' || v_outer ) ;

END ;

/

 

Outer : Outer Variable

Outer : Outer Variable

Inner : Inner Variable

Outer : Outer Variable

 

ex2)하위 블록에 선언된 변수는 상위변수에서 출력 불가능하다.

SQL> SET SERVEROUTPUT ON

DECLARE

             v_outer VARCHAR2(100) := 'Outer Variable' ;

BEGIN

             DECLARE

                           v_inner VARCHAR2(100) := 'Inner Variable' ;

             BEGIN

                           DBMS_OUTPUT.PUT_LINE ('Outer : ' || v_outer ) ;

             DBMS_OUTPUT.PUT_LINE ('Inner : ' || v_inner) ;

END ;

             DBMS_OUTPUT.PUT_LINE ('Outer : ' || v_outer ) ;

             DBMS_OUTPUT.PUT_LINE ('Inner : ' || v_inner) ;

 END ;

/

ERROR at line 11:

ORA-06550: line 11, column 39:

PLS-00201: identifier 'V_INNER' must be declared

ORA-06550: line 11, column 3:

PL/SQL: Statement ignored

 

Ex3) 같은 변수이름으로 만들 경우, 레이블을 통한 구분.

BEGIN <<outer>> --테이블에 별칭을 붙이듯 레이블을지정.

             DECLARE

                           v_father_name VARCHAR2(20):='Patrick';

                           v_date_of_birth DATE := TO_DATE('20-APR-1972','DD-MON-YYYY') ;

             BEGIN

                           DECLARE           

                                        v_child_name VARCHAR2(20):='Mike';

                                        v_date_of_birth DATE := TO_DATE('12-DEC-2002','DD-MON-YYYY') ;

                           BEGIN

                                        DBMS_OUTPUT.PUT_LINE('Father''s Name: '||v_father_name);

                                        DBMS_OUTPUT.PUT_LINE('Date of Birth: '||outer.v_date_of_birth);

                                        DBMS_OUTPUT.PUT_LINE('Child''s Name: '||v_child_name);

                                        DBMS_OUTPUT.PUT_LINE('Date of Birth: '||v_date_of_birth);

                           END;

             END;

END outer;

/

Father's Name: Patrick

Date of Birth: 20-APR-72

Child's Name: Mike

Date of Birth: 12-DEC-02

PL/SQL procedure successfully completed.

'ORACLE > PL/SQL' 카테고리의 다른 글

6장 . 조합데이터 유형  (0) 2014.02.16
5장. 제어 구조 작성  (0) 2014.02.16
4장 PL/SQL 프로그램에서 SQL 문과 상호 작용  (0) 2014.02.16
2장 PL/SQL 변수 선언  (0) 2014.02.16
1장. PL/SQL 소개  (0) 2014.02.16