Oracle PL/SQL 저장 프로시저 및 함수와 예제
⚡ 스마트 요약
PL/SQL 서브프로그램은 데이터베이스에 저장되고 이름으로 호출되는 명명된 블록, 프로시저 및 함수입니다. 프로시저는 프로세스를 실행하고 함수는 값을 반환하며, 둘 다 IN, OUT, IN-OUT 매개변수와 RETURN 키워드를 통해 데이터를 교환합니다.
PL/SQL 서브프로그램이란 무엇인가요?
이 튜토리얼에서는 명명된 블록, 프로시저 및 함수를 생성하고 실행하는 방법에 대한 자세한 설명을 볼 수 있습니다.
프로시저와 함수는 데이터베이스에 데이터베이스 객체로 생성 및 저장할 수 있는 서브프로그램입니다. 또한 다른 코드 블록 내에서 호출하거나 참조할 수 있습니다.
또한 이 두 하위 프로그램의 주요 차이점을 다루고 논의합니다. Oracle 내장된 기능.
PL/SQL 서브프로그램의 용어
PL/SQL 서브프로그램에 대해 배우기 전에, 이러한 서브프로그램과 관련된 다양한 용어들을 살펴보겠습니다.
매개 변수
매개변수는 유효한 모든 값을 나타내는 변수 또는 자리 표시자입니다. PL/SQL 데이터 유형 PL/SQL 서브프로그램이 메인 코드와 값을 교환하는 데 사용되는 매개변수입니다. 이 매개변수를 통해 서브프로그램에 입력을 제공하고 서브프로그램을 종료할 수 있습니다.trac그들로부터 가치를 얻는 것.
- 이러한 매개변수는 생성 시 서브프로그램과 함께 정의되어야 합니다.
- 이들은 하위 프로그램과 상호 작용하기 위해 호출문에 포함됩니다.
- 서브프로그램의 매개변수 데이터 형식과 호출문의 매개변수 데이터 형식은 동일해야 합니다.
- 데이터 형식의 크기는 동적이므로 매개변수 선언 시 크기를 명시해서는 안 됩니다.
매개변수는 목적에 따라 다음과 같이 분류됩니다.
- IN 매개변수
- 아웃 매개변수
- IN OUT 매개변수
IN 매개변수
- 하위 프로그램에 입력을 제공하는 데 사용됩니다.
- 이 변수는 서브프로그램 내부에서 읽기 전용 변수이며, 서브프로그램 내부에서는 값을 변경할 수 없습니다.
- 호출문에서는 변수, 리터럴 값 또는 '5*8'이나 'a/b'와 같은 표현식이 될 수 있습니다.
- 기본적으로 매개변수는 IN 형식입니다.
아웃 매개변수
- 하위 프로그램의 출력을 얻는 데 사용됩니다.
- 이 변수는 서브프로그램 내부에서 읽기/쓰기가 가능하며, 서브프로그램 내부에서 값을 변경할 수 있습니다.
- 호출문에서는 항상 서브프로그램의 값을 저장할 변수를 지정해야 합니다.
IN OUT 매개변수
- 서브프로그램에 입력을 제공하고 서브프로그램으로부터 출력을 받는 데 모두 사용됩니다.
- 이 변수는 서브프로그램 내부에서 읽기/쓰기가 가능하며, 서브프로그램 내부에서 값을 변경할 수 있습니다.
- 호출문에서는 항상 서브프로그램의 값을 저장할 변수를 지정해야 합니다.
서브프로그램을 생성할 때 매개변수 유형을 명시해야 합니다.
RETURN
RETURN은 컴파일러에게 서브프로그램에서 호출문으로 제어를 전환하도록 지시하는 키워드입니다. 서브프로그램에서 RETURN은 단순히 제어가 서브프로그램을 벗어나야 함을 의미합니다. 컴파일러는 RETURN을 발견하면 그 이후의 코드를 건너뜁니다.
일반적으로 부모 또는 메인 블록에서 서브 프로그램을 호출하고, 제어권은 부모 블록에서 호출된 서브 프로그램으로 이동합니다. 서브 프로그램의 RETURN 문은 제어권을 부모 블록으로 되돌립니다. 함수의 경우, RETURN 문은 함수 선언 시 지정된 데이터 형식의 값을 반환합니다.
PL/SQL에서 프로시저란 무엇인가요?
A 순서 PL/SQL에서 프로시저는 이름으로 호출할 수 있는 PL/SQL 문들의 그룹으로 구성된 서브프로그램 단위입니다. 각 프로시저는 고유한 이름을 가지며 해당 이름은 프로시저 디렉토리에 저장됩니다. Oracle 데이터베이스를 데이터베이스 객체로 간주합니다.
참고 : 서브프로그램은 프로시저와 같은 것이며, 요구 사항에 따라 수동으로 생성해야 합니다. 생성 후에는 데이터베이스 객체로 저장됩니다.
PL/SQL에서 프로시저 서브프로그램 단위의 특징은 다음과 같습니다.
- 프로시저는 독립적인 블록으로 저장될 수 있습니다. 데이터베이스.
- PL/SQL 문을 실행하기 위해 이름으로 호출할 수 있습니다.
- 주로 프로세스를 실행하는 데 사용됩니다.
- 블록은 중첩될 수 있으며, 다른 블록이나 패키지 안에 중첩될 수도 있습니다.
- 메서드에는 선언 부분(선택 사항), 실행 부분 및 예외 처리 부분(선택 사항)이 포함됩니다.
- 프로시저에 값을 전달하거나 프로시저에서 값을 가져오려면 매개변수를 사용할 수 있습니다.
- 이러한 매개변수는 호출 문에 포함되어야 합니다.
- 프로시저는 호출 블록으로 제어를 반환하기 위해 RETURN 문을 사용할 수 있지만, RETURN 문을 통해 값을 반환할 수는 없습니다.
- 프로시저는 SELECT 문에서 직접 호출할 수 없으며, 다른 블록에서 또는 EXEC 키워드를 통해 호출할 수 있습니다.
통사론
CREATE OR REPLACE PROCEDURE <procedure_name> ( <parameter1 IN/OUT <datatype> .. . ) [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- `CREATE PROCEDURE`는 컴파일러에게 새로운 프로시저를 생성하도록 지시합니다. `OR REPLACE` 키워드는 기존 프로시저(있는 경우)를 현재 프로시저로 대체하도록 지시합니다.
- 절차 이름은 고유해야 합니다.
- 저장 프로시저가 다른 코드 블록 내부에 중첩되어 있을 때는 'IS' 키워드를 사용합니다. 프로시저가 독립적으로 실행될 경우에는 'AS'를 사용합니다. 이러한 코딩 표준을 제외하면 두 키워드는 동일한 의미를 가집니다.
예제 1: 프로시저를 생성하고 EXEC를 사용하여 호출하기. 이 예제에서는 다음을 생성합니다. Oracle 이름을 입력받아 환영 메시지를 출력하는 프로시저이며, EXEC 명령어를 사용하여 호출됩니다.
CREATE OR REPLACE PROCEDURE welcome_msg (p_name IN VARCHAR2) IS BEGIN dbms_output.put_line ('Welcome '|| p_name); END; / EXEC welcome_msg ('Guru99');
Code 설명 :
- Code 1행: 'welcome_msg'라는 이름과 'IN' 형식의 매개변수 'p_name' 하나를 가진 프로시저를 생성합니다.
- Code 4행: 입력된 이름을 연결하여 환영 메시지를 출력합니다.
- 프로시저가 성공적으로 컴파일되었습니다.
- Code 7행: '매개변수 '를 사용하여 EXEC로 프로시저를 호출합니다.Guru99'. 프로시저가 실행되고 "환영합니다"가 출력됩니다. Guru99. "
기능이란 무엇입니까?
함수는 독립적인 PL/SQL 서브프로그램입니다. 프로시저와 마찬가지로 함수는 고유한 이름을 가지며 PL/SQL 데이터베이스 객체로 저장됩니다. 함수의 특징은 다음과 같습니다.
- 함수는 주로 계산에 사용되는 독립적인 블록입니다.
- 함수는 RETURN 키워드를 사용하여 값을 반환하며, 해당 값의 데이터 형식은 생성 시점에 정의됩니다.
- 함수는 값을 반환하거나 예외를 발생시켜야 합니다. 함수에서 `return`은 필수입니다.
- DML 문이 없는 함수는 SELECT 쿼리에서 직접 호출할 수 있지만, DML 문이 있는 함수는 다른 PL/SQL 블록에서만 호출할 수 있습니다.
- 블록 내부에 또 다른 블록이나 패키지가 중첩될 수 있습니다.
- 이 파일에는 선언 부분(선택 사항), 실행 부분 및 예외 처리 부분(선택 사항)이 포함됩니다.
- 함수에 값을 전달하거나 함수에서 값을 가져올 때 매개변수를 사용할 수 있습니다.
- 이러한 매개변수는 호출 문에 포함되어야 합니다.
- 함수는 RETURN을 사용하는 것 외에도 OUT 매개변수를 통해 값을 반환할 수 있습니다.
- 할당 연산자는 항상 값을 반환하므로 호출문에서는 항상 변수에 값을 할당하는 데 사용됩니다.
통사론
CREATE OR REPLACE FUNCTION <function_name> ( <parameter1 IN/OUT <datatype> ) RETURN <datatype> [ IS | AS ] <declaration_part> BEGIN <execution part> EXCEPTION <exception handling part> END;
- `CREATE FUNCTION`은 컴파일러에게 새로운 함수를 생성하도록 지시합니다. `OR REPLACE`는 기존 함수(있는 경우)를 현재 함수로 대체하도록 지시합니다.
- 함수 이름은 고유해야 합니다.
- 반환 데이터 유형을 명시해야 합니다.
- 함수가 다른 블록 안에 중첩되어 있을 때는 'IS' 키워드를 사용합니다. 함수가 독립적으로 실행될 때는 'AS' 키워드를 사용합니다.
예제 1: 익명 블록을 사용하여 함수를 생성하고 호출하는 방법. 이 프로그램에서는 익명 블록과 SELECT 문을 사용하여 이름을 입력받아 환영 메시지를 반환하는 함수를 생성합니다.
CREATE OR REPLACE FUNCTION welcome_msg_func ( p_name IN VARCHAR2) RETURN VARCHAR2 IS BEGIN RETURN ('Welcome '|| p_name); END; / DECLARE lv_msg VARCHAR2(250); BEGIN lv_msg := welcome_msg_func ('Guru99'); dbms_output.put_line(lv_msg); END; / SELECT welcome_msg_func('Guru99') FROM DUAL;
Code 설명 :
- Code 1행: 'welcome_msg_func'라는 이름과 'IN' 타입의 매개변수 'p_name' 하나를 가진 함수를 생성합니다.
- Code 2행: 반환 형식을 VARCHAR2로 선언합니다.
- Code 5행: 'Welcome'이라는 값과 매개변수 값을 연결한 값을 반환합니다.
- Code 8행: 위 함수를 호출하는 익명 블록입니다.
- Code 9행: 함수의 반환 타입과 동일한 데이터 타입으로 변수를 선언합니다.
- Code 11행: 함수를 호출하고 반환 값을 'lv_msg' 변수에 저장합니다.
- Code 12행: 변수 값을 출력합니다. 출력 결과는 "Welcome"입니다. Guru99. "
- Code 14행: SELECT 문을 통해 동일한 함수를 호출합니다. 반환 값은 표준 출력으로 전달됩니다.
절차와 함수의 유사점
- 둘 다 다른 PL/SQL 블록에서 호출할 수 있습니다.
- 하위 프로그램에서 발생한 예외가 해당 프로그램에서 처리되지 않으면 예외 처리 해당 섹션의 내용은 호출하는 블록으로 전파됩니다.
- 둘 다 필요한 만큼 많은 매개변수를 가질 수 있습니다.
- 둘 다 PL/SQL에서는 데이터베이스 객체로 처리됩니다.
절차와 기능: 주요 차이점
| 순서 | 함수 |
|---|---|
| 주로 특정 프로세스를 실행하는 데 사용됩니다. | 주로 계산을 수행하는 데 사용됩니다. |
| SELECT 문에서 호출할 수 없습니다. | DML 문이 포함되지 않은 함수는 SELECT 문에서 호출할 수 있습니다. |
| OUT 매개변수를 사용하여 값을 반환합니다. | 값을 반환하려면 RETURN 문을 사용합니다. |
| 값을 반환하는 것은 필수가 아닙니다. | 값을 반환하는 것은 필수입니다. |
| RETURN은 단순히 서브프로그램에서 제어권을 벗어나는 명령입니다. | RETURN 명령은 서브프로그램에서 제어권을 벗어나고 값을 반환합니다. |
| 생성 시점에 반환 데이터 유형은 지정되지 않습니다. | 반환 데이터 유형은 생성 시 필수입니다. |
PL/SQL의 내장 함수
PL / SQL 이 라이브러리는 문자열 및 날짜 데이터 형식을 다루는 다양한 내장 함수를 포함하고 있습니다. 여기서는 자주 사용되는 함수와 그 사용법을 살펴보겠습니다.
변환 기능
이러한 내장 함수는 한 데이터 유형을 다른 데이터 유형으로 변환합니다.
| 기능 명 | 용법 | 예시 |
|---|---|---|
| TO_CHAR | 다른 데이터 형식을 문자 데이터 형식으로 변환합니다. | TO_CHAR(123); |
| TO_DATE(문자열, 형식) | 주어진 문자열을 날짜 형식으로 변환합니다. 문자열은 지정된 형식과 일치해야 합니다. | TO_DATE('2015-JAN-15', 'YYYY-MON-DD'); 산출: 1 / 15 / 2015 |
| TO_NUMBER(텍스트, 형식) | 텍스트를 지정된 형식의 숫자로 변환합니다. 형식에서 '9'는 자릿수를 나타냅니다. | 듀얼에서 TO_NUMBER('1234′,'9999')를 선택하세요. 산출: 1234. dual에서 TO_NUMBER('1,234.45′,'9,999.99')를 선택합니다. 산출: 1234.45 |
문자열 함수
이 함수들은 문자 데이터 형식에 사용됩니다.
| 기능 명 | 용법 | 예시 |
|---|---|---|
| INSTR(텍스트, 문자열, 시작, 발생 횟수) | 주어진 문자열에서 특정 텍스트의 위치를 반환합니다. `text`는 기본 문자열이고, `string`은 검색할 텍스트이며, `start`는 시작 위치(선택 사항)이고, `occurrence`는 검색된 문자열의 발생 횟수(선택 사항)입니다. | dual에서 INSTR('AEROPLANE','E',2,1)을 선택합니다. 산출: 2. dual에서 INSTR('AEROPLANE','E',2,2)를 선택합니다. 산출: 9 (E가 두 번째로 나타남) |
| SUBSTR(텍스트, 시작, 길이) | 본문 문자열에서 부분 문자열 값을 반환합니다. `text`는 본문 문자열이고, `start`는 시작 위치, `length`는 부분 문자열을 추출할 길이입니다. | dual에서 substr('aeroplane',1,7)을 선택합니다. 산출: 에어로플라 |
| 상단(텍스트) | 제공된 텍스트를 대문자로 변환하여 반환합니다. | 듀얼에서 upper('guru99')를 선택합니다. 산출: 구루99 |
| 하단(텍스트) | 제공된 텍스트를 소문자로 반환합니다. | dual에서 lower('AerOpLane')을 선택합니다. 산출: 비행기 |
| INITCAP(텍스트) | 주어진 텍스트에서 각 단어의 첫 글자를 대문자로 바꿔 반환합니다. | dual에서 INITCAP('guru99')를 선택합니다. 산출: Guru99. 듀얼에서 INITCAP('내 이야기')를 선택합니다. 산출: 내 이야기 |
| 길이(텍스트) | 주어진 문자열의 길이를 반환합니다. | dual에서 LENGTH('guru99')를 선택합니다. 산출: 6 |
| LPAD(텍스트, 길이, pad_char) | 왼쪽 문자열을 지정된 문자로 채워 지정된 총 길이로 만듭니다. | 듀얼에서 LPAD('guru99', 10, '$')를 선택합니다. 산출: $$$$guru99 |
| RPAD(텍스트, 길이, pad_char) | 오른쪽 문자열을 지정된 문자로 채워 지정된 총 길이까지 채웁니다. | dual에서 RPAD('guru99′,10,'-')를 선택합니다. 산출: guru99—- |
| LTRIM(텍스트) | 텍스트 앞의 공백을 제거합니다. | LTRIM('을 선택하세요 Guru99') 이중에서; 산출: Guru99 |
| RTRIM(텍스트) | 텍스트 끝의 공백을 제거합니다. | RTRIM('을 선택하세요Guru99') 이중에서; 산출: Guru99 |
날짜 함수
이 함수들은 날짜를 조작하는 데 사용됩니다.
| 기능 명 | 용법 | 예시 |
|---|---|---|
| ADD_MONTHS(날짜, 개월 수) | 주어진 월을 날짜에 더합니다. | ADD_MONTHS('2015-01-01',5); 산출: 05 / 01 / 2015 |
| 시스템 날짜 | 서버의 현재 날짜와 시간을 반환합니다. | 이중에서 SYSDATE를 선택하십시오. 산출: 10년 4월 2015일 오후 2시 11분 43초 |
| 트렁크 | 날짜 변수를 가능한 가장 낮은 값으로 내림합니다. | 듀얼에서 sysdate, TRUNC(sysdate)를 선택합니다. 산출: 10/4/2015 2:12:39 PM, 10/4/2015 |
| 라운드 | 날짜를 가장 가까운 한계값(높거나 낮음)으로 반올림합니다. | dual에서 sysdate, ROUND(sysdate)를 선택합니다. 산출: 10/4/2015 2:14:34 PM, 10/5/2015 |
| MONTHS_BETWEEN | 두 날짜 사이의 개월 수를 반환합니다. | dual에서 MONTHS_BETWEEN(sysdate+60, sysdate)을 선택합니다. 산출: 2 |



