pl sql operators control statements tutorial
샘플 코드 예제를 통해 if-then-else, for 루프, while 루프 등과 같은 다양한 PL SQL 연산자 및 제어 문에 대해 알아보십시오.
에서 PL / SQL 명령 튜토리얼 PL / SQL 시리즈 , 우리는 프로그래밍 예제를 통해 PL SQL INSERT, UPDATE, DELETE 및 SELECT 명령에 대해 배웠습니다.
이 기사에서는 관계형, 논리, 산술 및 비교 연산자와 같이 PL / SQL이 지원하는 다양한 연산자에 대해 설명합니다. 또한 PL / SQL에서 광범위하게 사용되는 제어문을 조사 할 것입니다.
PL / SQL 조건 및 반복 구조는이 튜토리얼의 예제와 함께 자세히 설명되었습니다.
matroska 비디오 파일을 재생하는 방법
학습 내용 :
PL SQL 연산자
PL SQL 연산자는 기호를 사용하여 산술 및 논리 연산을 수행하도록 컴파일러에 지시합니다.
기본적으로 PL / SQL에는 다음 연산자 유형이 있습니다.
- 산수
- 비교
- 논리적
- 끈
- 관계형
# 1) 산술 연산자
상징 | 기술 | |
---|---|---|
7 | 과 | 접속사 |
+ | 두 개의 피연산자를 더합니다. | |
* | 두 피연산자의 곱셈을 수행합니다. | |
/ | 두 피연산자의 나눗셈을 수행합니다. | |
- | 두 피연산자의 빼기를 수행합니다. | |
** | 지수 연산을 수행합니다. |
산술 연산자를 사용한 코드 구현 :
declare a number(5):= 2; b number(5):= 1; res number(10); sub number(10); mul number(10); div number(10); exp number(10); begin -- adding a and b and storing in res res:= a+b; -- subtracting b from a and storing in sub sub:= a-b; -- multiplying a and b and storing in mul mul:= a*b; -- dividing a and b and storing in div div:= a/b; -- exponential operation and storing in exp exp:= a**b; dbms_output.put_line('Sum value is '||res); dbms_output.put_line('Subtraction value is '||sub); dbms_output.put_line('Multiplication value is '||mul); dbms_output.put_line('Division value is '||div); dbms_output.put_line('Exponential value is '||exp); end; /
위 코드의 출력은 다음과 같아야합니다.
# 2) 관계 연산자
이러한 연산자는 비교를 수행하고 값을 부울로 반환합니다.
일련 번호. | 상징 | 기술 |
---|---|---|
하나 | > | 왼쪽 피연산자의 값이 오른쪽보다 큰지 확인합니다. |
두 | < | 오른쪽 피연산자의 값이 왼쪽보다 큰지 확인합니다. |
삼 | > = | 왼쪽 피연산자의 값이 오른쪽보다 큰지 확인합니다. |
4 | <= | 오른쪽 피연산자의 값이 왼쪽보다 큰지 확인합니다. |
5 | = | 두 피연산자가 같은지 확인합니다. |
6 | ! =, ~ =, | 두 피연산자가 같지 않은지 확인합니다. |
관계 연산자를 사용한 코드 구현 :
DECLARE a NUMBER := 5; b NUMBER := 12; BEGIN IF a != b THEN DBMS_OUTPUT.PUT_LINE('a is not equal to b'); ELSIF a = b THEN DBMS_OUTPUT.PUT_LINE('a is equal to b'); ELSE DBMS_OUTPUT.PUT_LINE ('Not sure of the input'); END IF; END; /
위 코드의 출력은 다음과 같아야합니다.
# 3) 비교 연산자
이 연산자는 한 명령문을 다른 명령문과 비교 한 결과에 따라 출력을 true, false 또는 null 값으로 제공합니다.
상징 | 기술 |
---|---|
중에서 | 값이 범위에 있는지 확인합니다. |
에 | 값이 구성원 집합과 같은지 확인합니다. |
처럼 | 문자열 또는 문자가 패턴과 유사한 지 확인합니다. |
NULL입니다. | 피연산자가 Null 값과 같은지 확인합니다. |
비교 연산자를 사용한 코드 구현 :
DECLARE i INTEGER; -- NULL value is set by default BEGIN i := i*5; -- i is still NULL since NULL * 5 is NULL IF i IS NULL THEN DBMS_OUTPUT.PUT_LINE('i is NULL.'); END IF; END; /
위 코드의 출력은 다음과 같아야합니다.
# 4) 논리 연산자
PL / SQL은 둘 이상의 논리 연산자를 지원합니다. 그들은 본질적으로 부울 인 피연산자에 대해 작동하며 부울 결과도 생성합니다.
일련 번호. | 상징 | 기술 |
---|---|---|
하나 | 아니 | 논리적 NOT으로 알려져 있습니다. 결과가 참이면 NOT은 거짓으로 만듭니다. |
두 | 과 | 논리적 AND라고합니다. 모든 피연산자가 참이면 결과는 참입니다. |
삼 | 또는 | 논리 OR로 알려져 있습니다. 피연산자 중 하나라도 참이면 결과는 참입니다. |
논리 연산자를 사용한 코드 구현 :
declare n1 number := 5; n2 number := 10; n3 number := 15; begin if (n1 n2 or n1 = 5) then dbms_output.put_line ('The condition is true'); else dbms_output.put_line ('The condition is false'); end if; end; /
위 코드의 출력은 다음과 같아야합니다.
연산자 우선 순위
PL SQL 연산자 우선 순위는 단일 또는 다중 연산자 또는 둘 이상의 피연산자를 포함하는 연산이 수행되는 방법을 정의하기 위해 설정됩니다. 우선 순위가 더 높은 연산자가 다른 연산자보다 먼저 계산되는 반면 동일한 우선 순위를 가진 연산자는 특정 순서없이 조작됩니다.
아래 표는 높은 우선 순위에서 낮은 우선 순위로 연산자를 나열합니다.
일련 번호. | 상징 | 기술 |
---|---|---|
하나 | ** | 지수 연산 |
두 | +,- | 더하기, 빼기 |
삼 | *, / | 곱셈, 나눗셈 |
4 | +,-, || | 더하기, 빼기, 연결 |
5 | 비교 연산자 | |
6 | 아니 | 부정 |
8 | 또는 | 포함 |
PL / SQL의 제어문
PL / SQL의 제어 구조는 다음과 같은 프로그램 구조로 구성됩니다. 반복, 시퀀스, 과 선택 . 선택 형식은 조건을 확인한 다음 참 또는 거짓 결과에 따라 다음 코드 블록을 순서대로 처리합니다.
반복 형식은 조건이 유효 할 때까지 코드 또는 명령문 블록을 반복적으로 실행합니다. 마지막으로 시퀀스 형식은 존재하는 순서대로 문을 하나씩 처리합니다.
PL SQL의 조건문
의사 결정 시나리오에서는 IF-THEN, IF-THEN-ELSE, IF-THEN-ELSEIF 및 CASE와 같은 조건문이 사용됩니다.
# 1) IF-THEN : 이것은 IF 문의 기본 형식 중 하나입니다. 키워드 ENDIF 및 THEN이있는 코드 블록을 포함합니다. 조건의 결과가 참이면 다음 코드 블록이 실행됩니다.
IF-THEN의 구조 :
IF condition THEN Block of code END IF;
이와 같이 한 줄에 짧은 IF –THEN 블록을 유지할 수도 있습니다.
IF big > small THEN temp: = big; END IF;
IF-THEN을 사용한 코드 구현 :
DECLARE i number(10,2) := 15; BEGIN -- checking the condition IF( i > 2 ) THEN -- true condition dbms_output.put_line('i is greater than 1 ' ); END IF; dbms_output.put_line('the numeric value of i is '|| i); END; /
위 코드의 출력은 다음과 같아야합니다.
# 2) IF-THEN-ELSE : 이것은 ELSE 키워드가 있고 다음 코드 블록이있는 IF 문의 다음 형식입니다. 이 ELSE 문 블록은 선택 사항이며 조건이 FALSE 일 때 실행됩니다.
IF-THEN-ELSE의 구조 :
IF condition THEN Block of code 1 ELSE Block of code 2 END IF;
IF-THEN-ELSE를 사용한 코드 구현 :
DECLARE num number(10,2) := 150; BEGIN -- checking the condition IF( num > 100 ) THEN -- true condition dbms_output.put_line('num is greater than 100 '); ELSE dbms_output.put_line('num is lesser than 100 '); END IF; dbms_output.put_line('value of number is : ' || num); END; /
위 코드의 출력은 다음과 같아야합니다.
# 3) IF-THEN-ELSIF : 이 조건문은 대안 중에서 선택할 수있는 옵션을 제공합니다. ELSE… ELSE 코드 블록은 선택적으로 IF-THEN 문 뒤에 올 수 있습니다. 따라서 상호 배타적 인 여러 선택을 처리하는 동안 사용됩니다.
IF-THEN 코드 블록은 ELSE 문 앞에 표시되는 경우 ELSIF가 없거나 여러 개일 수 있습니다. 한 ELSIF 블록에서 참 조건이 발생하면 다른 ELSE 또는 ELSIF는 무시됩니다.
IF-THEN-ELSIF의 구조 :
IF condition 1 THEN Block of code 1 ELSIF condition 2 THEN Block of code 2 ELSE Block of code 3 END IF;
IF-THEN-ELSIF를 사용한 코드 구현 :
DECLARE num number(8,2) := 20; BEGIN IF ( num <15 ) THEN dbms_output.put_line('The num is greater than 15' ); ELSIF ( num = 15 ) THEN dbms_output.put_line('The num is 15' ); ELSIF ( num <= 20 ) THEN dbms_output.put_line('The num is less than equal to 20'); ELSE dbms_output.put_line('The num is invalid '); END IF; dbms_output.put_line('The num is : '|| num); END; /
위 코드의 출력은 다음과 같습니다.
# 4) 사례 설명 : 이 조건문은 선택 항목에서 코드 블록 하나를 선택합니다. 그러나 IF 문과 마찬가지로 CASE는 부울 입력을 사용하지 않고 옵션 중 하나를 선택하는 데 도움이되는 표현식을 사용합니다.
CASE 문의 마지막 선택이 기본값입니다. CASE STATEMENT는 IF 문에 비해 더 효율적이고 길지 않습니다.
사례 진술의 구조 :
CASE selector WHEN 'condition 1' THEN block of code 1; WHEN 'condition2' THEN block of code 2; WHEN 'condition 3' THEN block of code 3; ... ELSE default case END CASE;
CASE STATEMENT를 사용한 코드 구현 :
DECLARE age number(5) := 15; BEGIN CASE age when '1' then dbms_output.put_line('Infant'); when '5' then dbms_output.put_line('In school'); when '15' then dbms_output.put_line('High school'); else dbms_output.put_line('Qualified for class 10 '); END CASE; END; /
위 코드의 출력은 다음과 같습니다.
# 5) SEARCHED CASE 진술 : 이 조건문에는 선택기가 없으며 WHEN 코드 블록은 부울 결과 만 제공하고 다른 데이터 유형의 값은 제공하지 않습니다.
SEARCHED CASE 문의 구조 :
CASE WHEN 'condition 1' THEN block of code 1; WHEN 'condition 2' THEN block of code 2; WHEN 'condition 3' THEN block of code 3; ... ELSE default case END CASE;
SEARCHED CASE 문을 사용한 코드 구현 :
DECLARE model varchar(10) := '4'; BEGIN case when model = '1' then dbms_output.put_line('FIAT'); when model = '2' then dbms_output.put_line('TOYOTA'); when model = '3' then dbms_output.put_line('MARUTI'); when model = '4' then dbms_output.put_line('HYUNDAI'); else dbms_output.put_line('Premium MODEL'); end case; END; /
위 코드의 출력은 다음과 같아야합니다.
# 6) 중첩 된 IF-THEN-ELSE : 이 조건문은 다른 IF 또는 ELSE IF 내에서 ELSE IF 또는 IF 블록을 사용하는 규정을 제공합니다.
NESTED IF-THEN-ELSE의 구조 :
IF condition 1 THEN Block of code 1 IF condition 2 THEN Block of code 2 END IF; ELSE Block of code 3 when condition 1 is false END IF;
NESTED IF-THEN-ELSE를 사용한 코드 구현 :
DECLARE i number(10,2) := 65; j number(5) := 10; BEGIN -- checking the condition IF( i > 50 ) THEN -- if true move to the next IF statement IF( j <15 ) THEN dbms_output.put_line('In the nested if block' ); END IF; END IF; dbms_output.put_line('The value of first number is : ' || i ); dbms_output.put_line('The value of second number is : ' || j ); END; /
위 코드의 출력은 다음과 같아야합니다.
PL SQL의 반복문
PL / SQL에서 로직을 구현하는 동안 코드 블록을 여러 번 반복적으로 처리해야 할 수 있습니다. 이것은 LOOP 문의 도움으로 달성됩니다. 세 가지 유형이 있습니다. FOR-LOOP, WHILE-LOOP 및 LOOP.
# 1) PL SQL 루프
LOOP는 아래와 같은 기본 구조를 가지고 있습니다.
LOOP Block of code END LOOP;
각 반복 후 프로그램 흐름은 특정 조건이 충족 될 때까지 루프의 맨 위로 다시 가리 킵니다. 상황에 따라 루프를 빠져 나가고 싶은 경우에는 EXIT 문을 사용할 수 있습니다.
# 2) PL SQL WHILE LOOP
이 루프는 조건이 유효 할 때까지 코드 블록을 여러 번 실행합니다. 각 반복이 시작될 때 루프 조건이 확인됩니다. 만족하면 코드 블록이 실행됩니다.
조건이 null이거나 충족되지 않으면 루프를 피하고 다음 코드 블록이 실행됩니다.
WHILE LOOP의 구조 :
WHILE condition LOOP Block of code END LOOP;
WHILE LOOP를 사용한 코드 구현 :
DECLARE num number(10,1) := 3; BEGIN WHILE num <4 LOOP dbms_output.put_line('The value of number: ' || num); num := num + 1; END LOOP; END; /
위 코드의 출력은 다음과 같아야합니다.
# 3) PL SQL FOR LOOP
이 유형의 루프를 사용하면 코드 블록을 특정 횟수만큼 실행할 수 있습니다. 시작 단계는 한 번 실행됩니다. 이것은 주로 루프 변수의 초기화 및 선언에 사용됩니다. 그런 다음 경계 값 (시작 및 끝 범위)이 확인됩니다. 조건이 충족되면 LOOP 내부의 코드 블록이 실행됩니다. 그렇지 않은 경우 프로그램 흐름은 루프 후 다음 코드 블록으로 이동합니다.
한 번 반복하면 루프 카운터가 하나씩 증가하거나 감소합니다. 루프 조건이 충족 될 때까지 전체 프로세스가 계속됩니다. 조건이 FALSE가되면 루프가 종료됩니다.
PL / SQL에서 루프의 시작 및 끝 범위는 런타임에 변경 될 수 있습니다. 루프의 카운터는 정수, 숫자 등이어야합니다 (숫자로 늘리거나 줄일 수 있음). 카운터 변수의 시작 값은 임의의 숫자가 될 수 있습니다.
FOR LOOP의 구조 :
FOR counter IN start_value .. end_value LOOP Block of code 1 END LOOP;
FOR LOOP의 코드 구현 :
DECLARE num number(10,1); BEGIN FOR num in 1.. 5 LOOP dbms_output.put_line('The num is:' || num); END LOOP; END; /
위 코드의 출력은 다음과 같아야합니다.
# 4) 중첩 루프
이 유형의 문은 하나의 루프를 다른 루프에 대해 허용합니다. 외부 및 내부 루프 구조는 동일하거나 다른 유형일 수 있습니다. 각 순회 후에 두 루프가 모두 성공적으로 실행되어야합니다.
중첩 루프의 구조 :
LOOP (outer) Block of code 1 LOOP (inner) Block of code 2 END LOOP; END LOOP;
NESTED LOOP를 사용한 코드 구현 :
BEGIN FOR i IN 1..2 LOOP FOR j IN 1..2 LOOP DBMS_OUTPUT.PUT_LINE('The value of i is ' || i); DBMS_OUTPUT.PUT_LINE('The value of j is ' || j); END LOOP; END LOOP; END; /
위 코드의 출력은 다음과 같아야합니다.
PL / SQL의 루프 레이블
PL / SQL에는 코드의 가독성과 의미를 높이는 루프에 레이블을 지정하는 기능이 있습니다. 레이블은 이중 꺾쇠 괄호 ( << 과 >> ) 및 LOOP 문의 맨 위에 언급되어 있습니다. 레이블은 LOOP 끝에도 배치 할 수 있습니다.
루프에서 나오는 동안 EXIT 문에 대해 레이블을 설명 할 수도 있습니다.
라벨의 구조 :
<> LOOP Block of Code END LOOP;
LOOP LABEL을 사용한 코드 구현 :
BEGIN <> FOR i IN 1..2 LOOP <> FOR j IN 1..2 LOOP DBMS_OUTPUT.PUT_LINE('The value of i is ' || i); DBMS_OUTPUT.PUT_LINE('The value of j is ' || j); END LOOP; END LOOP; END; /
시퀀스 제어문
제어문은 프로그램의 실행 흐름을 수정하는 데 사용됩니다.
# 1) 종료
EXIT 문은 루프를 명시 적으로 중단합니다. 루프에서 EXIT가 발견되면 루프가 중단되고 프로그램 흐름이 다음 코드 블록으로 이동합니다. 중첩 루프를 사용하는 조건에서 EXIT 문은 먼저 내부 루프를 종료 한 다음 바로 뒤에 나타나는 코드 블록을 실행합니다.
EXIT를 사용한 코드 구현 :
DECLARE num number(10,1) := 15; BEGIN -- loop condition WHILE num <20 LOOP dbms_output.put_line ('The num is: ' || num); num := num + 1; IF mod(num, 2) = 0 THEN -- exit from loop EXIT; END IF; END LOOP; END; /
위 코드의 출력은 다음과 같아야합니다.
# 2) 계속
이 제어문을 사용하면 루프가 나오고 다음 반복으로 이동할 수 있습니다.
CONTINUE를 사용한 코드 구현 :
DECLARE num number(10,1) := 5; BEGIN -- while loop execution WHILE num <9 LOOP dbms_output.put_line ('The number is : ' || num); num := num + 1; IF mod(num,2) = 0 THEN num := num + 1; CONTINUE; END IF; END LOOP; END; /
위 코드의 출력은 다음과 같아야합니다.
# 3) GOTO
GOTO 문은 무조건 레이블이 지정된 고유 한 코드 블록으로 컨트롤을 이동합니다. GOTO 문을 사용하는 것은 코드의 가독성과 추적 성을 감소시키기 때문에 좋은 프로그래밍 기술이 아닙니다.
GOTO의 구조 :
GOTO 60; .. .. <> Block of code 1;
GOTO 문을 사용한 코딩 구현 :
BEGIN GOTO message_two; <> DBMS_OUTPUT.PUT_LINE( 'PLSQL Tutorial' ); GOTO message_third; <> DBMS_OUTPUT.PUT_LINE( 'Software Test Help!' ); GOTO message_one; <> DBMS_OUTPUT.PUT_LINE( 'PLSQL Control Statement' ); END;
위 코드의 출력은 다음과 같아야합니다.
자주 묻는 질문
Q # 1) PL / SQL의 제어문은 무엇입니까?
대답: PL / SQL의 제어문은 루프 문, 순차 명령문 및 제어문의 세 가지 유형입니다. 루프 문은 WHILE LOOP, FOR LOOP 및 기본 LOOP로 구성됩니다.
질문 # 2) PL / SQL에서 동등성을 어떻게 확인합니까?
대답: PL / SQL에는 동등성을 검사하는 동등 연산자가 있습니다.
예를 들면
SELECT NAME FROM EMPLOYEE WHERE AGE = 50;
Q # 3) PL / SQL에서 무한 루프를 어떻게 중지합니까?
대답: EXIT 문을 사용하여 PL / SQL에서 무한 루프를 중지 할 수 있습니다. EXIT 문을 루프 외부가 아닌 루프 내부에 유지해야합니다.
Q # 4) PL / SQL에서 조건부 제어 구조의 목적은 무엇입니까?
대답: 조건부 제어 구조는 일부 기준에 따라 프로그램의 흐름을 제어하는 옵션을 제공합니다. 따라서 프로그램의 코드는 순서대로 실행되지 않습니다. 조건에 따라 코드 블록이 실행됩니다.
Q # 5) 6 개의 관계 연산자는 무엇입니까?
대답: PL / SQL의 관계 연산자는 =,,! =, ==입니다.
Q # 6) 운영자의 유형은 무엇입니까?
답변 : PL / SQL의 다양한 연산자 유형은 다음과 같습니다.
- 비트 연산자
- 할당 연산자
- 산술 연산자
- 관계 연산자
- 논리 연산자
결론
이 자습서에서는 여러 연산자와 코드 예제의 중요성과 같은 주제를 다루는 PL / SQL의 상당 부분을 다루었습니다.
또한 PL SQL 제어문을 자세히 살펴 보았습니다. 제어문은 반복, 조건 및 시퀀스와 같은 프로그램 구조로 구성됩니다.
다음 튜토리얼에서는 PL SQL 프로 시저, 함수, 커서 및 더 많은 관련 주제에 대해 논의 할 것입니다.