PL/SQL 기초

4853 단어
PL/SQL은 "Procedural Language for SQL"을 의미합니다. Oracle Corporation은 프로시저, 기능, 패키지 및 트리거로 기본 SQL을 보완하기 위해 자체 Oracle 데이터베이스용으로 1980년대에 PL/SQL을 만들었습니다. 다음은 SQL과 PL/SQL의 주요 차이점 중 일부입니다.


SQL
PL/SQL


한 번에 하나의 작업을 실행합니다.
한 번에 여러 작업을 실행합니다.

선언적 언어
절차적 언어

데이터 지향 언어
애플리케이션 지향 언어

변수 없음
변수

데이터베이스 서버와 상호 작용
데이터베이스 서버와 상호 작용하지 않습니다.
for 루프 또는 if 문 없음
for 루프, while 루프 및 if


위의 표에서 볼 수 있듯이 PL/SQL은 일반적인 고급 프로그래밍 언어의 많은 기능을 채웁니다. 이제 몇 가지 예를 살펴보기 위해 익명 블록부터 시작하겠습니다. 익명 블록은 다음과 같이 4개의 키워드로 구분된 세 부분으로 구성됩니다.DECLARE선언 섹션BEGIN실행 섹션EXCEPTION예외 섹션END;
선언 섹션은 변수/상수 선언을 위한 것입니다. PL/SQL의 할당 연산자인 := 사용에 유의하십시오. 실행 섹션은 동작이 코딩되는 곳이고 예외 섹션은 오류가 처리되는 곳입니다. 선언 및 예외 섹션은 선택 사항이지만 실행 섹션은 필수입니다(레이블도 선택 사항임).

<<label>>
DECLARE
  number1 NUMBER(2);
  number2 number1%TYPE := 17;             -- value default
  text1   VARCHAR2(12) := 'Hello world';
  text2   DATE         := SYSDATE;        -- current date and time
BEGIN
  SELECT street_number
    INTO number1
    FROM address
    WHERE name = 'INU';
EXCEPTION
   WHEN OTHERS THEN
     DBMS_OUTPUT.PUT_LINE('Error Code is ' || TO_CHAR(sqlcode));
     DBMS_OUTPUT.PUT_LINE('Error Message is ' || sqlerrm);
END;


함수는 입력 및 반환 유형, 선언("비즈니스"및 예외 블록을 포함하는 맨 위에 선언이 포함됨)과 유사하게 형식이 지정됩니다.

CREATE OR REPLACE FUNCTION <function_name> [(input/output variable declarations)] RETURN return_type
[AUTHID <CURRENT_USER | DEFINER>] <IS|AS>   -- heading part
amount number;                              -- declaration block
BEGIN                                       -- executable part
    <PL/SQL block with return statement>
        RETURN <return_value>;
[Exception
    none]
        RETURN <return_value>;
END;


파이프라인 함수는 컬렉션을 반환하지만 전체 컬렉션이 완료될 때까지 기다리지 않고 반환 데이터 세트에 생성된 각 행이 생성될 때 반환되도록 성능이 최적화되었습니다. 각 개별 행의 구조를 설명하는 키워드PIPELINED와 호출PIPE ROW에 주목하세요.

CREATE OR REPLACE FUNCTION <function_name> [(input/output variable declarations)] RETURN return_type
[AUTHID <CURRENT_USER | DEFINER>] [<AGGREGATE | PIPELINED>] <IS|USING>
    [declaration block]
BEGIN
    <PL/SQL block with return statement>
        PIPE ROW(<return type>);
        RETURN;
[Exception
    exception block]
        PIPE ROW <return type>;
        RETURN;
END;


프로시저는 함수와 비슷하지만 두 가지 주요 방법이 있습니다. 함수는 단일 값/컬렉션만 반환해야 하는 반면 프로시저는 여러 개를 반환할 수 있으며 프로시저는 SQL 문에서 사용할 수 없지만 함수는 실제로 그렇게 할 수 있습니다.

CREATE PROCEDURE create_email_address (   -- Procedure heading
    name1 VARCHAR2,
    name2 VARCHAR2,
    company VARCHAR2,
    email OUT VARCHAR2
)                                         -- Procedure
AS
                                          -- Declarative (optional)
error_message VARCHAR2(30) := 'Email address is too long.';
BEGIN                                     -- Executable (required)
    email := name1 || '.' || name2 || '@' || company;
EXCEPTION                                 -- Exception (optional)
WHEN VALUE_ERROR THEN
    DBMS_OUTPUT.PUT_LINE(error_message);
END create_email_address;


조건부



조건문은 영어로 잘 읽기 때문에 상당히 간단하지만 END IF 문이 필요합니다. END 진술은 공통 주제입니다.

IF x = 1 THEN
   sequence_of_statements_1;
ELSIF x = 2 THEN
   sequence_of_statements_2;
ELSIF x = 3 THEN
   sequence_of_statements_3;
ELSE
   sequence_of_statements_N;
END IF;

CASE 문은 if 문과 매우 유사하지만 잠재적으로 작성하기 더 간단합니다.

CASE
   WHEN x = 1 THEN sequence_of_statements_1;
   WHEN x = 2 THEN sequence_of_statements_2;
   WHEN x = 3 THEN sequence_of_statements_3;
   ELSE sequence_of_statements_N;
END CASE;


루프는 PL/SQL의 큰 이점입니다. 다음은 두 숫자 사이의 범위 연산자("..")와 "DBMS_OUTPUT.PUT_LINE()"메서드로 표시된 대로 0과 10 사이의 숫자를 기록하는 FOR 루프의 매우 기본적인 개요입니다.

DECLARE
    var NUMBER;
BEGIN
    FOR var IN 0 .. 10 LOOP
        DBMS_OUTPUT.PUT_LINE(var);
    END LOOP;
END;


이 PL/SQL에 대한 간략한 소개가 제가 재미있게 읽었던 만큼 여러분도 즐거우셨기를 바랍니다! 저는 세계에서 가장 인기 있는 데이터베이스 시스템인 Oracle Database에 대해 더 깊이 파고들어 데이터베이스 주제에 대한 저의 여정을 계속하게 되어 매우 기쁩니다!

source

좋은 웹페이지 즐겨찾기