pl sql operators control statements tutorial
サンプルのコード例を使用して、if-then-else、forループ、whileループなどのさまざまなPLSQL演算子と制御ステートメントについて学習します。
の中に PL / SQLコマンド のチュートリアル PL / SQLシリーズ 、プログラミング例を使用して、PL SQL INSERT、UPDATE、DELETE、およびSELECTコマンドについて学習しました。
この記事では、関係演算子、論理演算子、算術演算子、比較演算子など、PL / SQLがサポートするさまざまな演算子について説明します。また、PL / SQLで広く使用されている制御文についても調査します。
PL / SQLの条件と反復構造については、このチュートリアルの例を使用して詳細に説明しています。
トップ50のSQLトリッキーな面接の質問pdf
学習内容:
PLSQL演算子
PL SQL演算子は、シンボルを使用して算術演算および論理演算を実行するようコンパイラに指示します。
デフォルトでは、PL / SQLには次の演算子タイプがあります。
- 算術
- 比較
- 論理的
- ストリング
- 関連した
#1)算術演算子
| シンボル | 説明 | |
|---|---|---|
| 7 | そして | 接続詞 |
| + | 2つのオペランドの加算を実行します。 | |
| * | 2つのオペランドの乗算を実行します。 | |
| / | 2つのオペランドの除算を実行します。 | |
| - | 2つのオペランドの減算を実行します。 | |
| **** | 指数演算を実行します。 |
算術演算子を使用したコードの実装:
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)関係演算子
これらの演算子は、ブール値で比較と戻り値を実行します。
| シリアル番号。 | シンボル | 説明 |
|---|---|---|
| 1 | >> | 左のオペランドの値が右よりも大きいかどうかを確認します。 |
| 二 | < | 右のオペランドの値が左よりも大きいかどうかを確認します。 |
| 3 | > = | 左のオペランドの値が右と等しいかどうかを確認します。 |
| 4 | <= | 右のオペランドの値が左よりも大きいかどうかを確認します。 |
| 5 | = | 2つのオペランドが等しいかどうかを確認します。 |
| 6 | !=、〜=、 | 2つのオペランドが等しくないかどうかを確認します。 |
関係演算子を使用したコードの実装:
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に等しいかどうかを確認します。 |
比較演算子を使用したコードの実装:
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は、複数の論理演算子をサポートしています。これらは、本質的にブール値であるオペランドに作用し、ブール値の結果も生成します。
| シリアル番号。 | シンボル | 説明 |
|---|---|---|
| 1 | ない | 論理NOTとして知られています。結果がtrueの場合、NOTはそれをfalseにします。 |
| 二 | そして | 論理積として知られています。すべてのオペランドが真の場合、結果は真です。 |
| 3 | または | 論理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演算子の優先順位は、単一または複数の演算子、あるいは複数のオペランドを含む演算の実行方法を定義するために設定されます。優先順位の高い演算子が最初に計算され、優先順位の高い演算子は特定の順序で操作されません。
次の表に、優先順位の高いものから低いものへの演算子を示します。
| シリアル番号。 | シンボル | 説明 |
|---|---|---|
| 1 | **** | 指数演算 |
| 二 | +、- | 足し算、引き算 |
| 3 | *、/ | 乗算、除算 |
| 4 | +、-、|| | 足し算、引き算、連結 |
| 5 | 比較演算子 | |
| 6 | ない | 否定 |
| 8 | または | インクルージョン |
PL / SQLの制御文
PL / SQLの制御構造は、次のようなプログラム構造で構成されます。 反復、シーケンス、 そして 選択 。選択の形式は条件を検証し、次にtrueまたはfalseの結果に基づいて、次のコードブロックを順番に処理します。
反復の形式は、条件が有効になるまで、コードまたはステートメントのブロックを繰り返し実行します。最後に、シーケンスの形式は、ステートメントを存在する順序で1つずつ処理します。
PLSQLの条件ステートメント
意思決定シナリオでは、IF-THEN、IF-THEN-ELSE、IF-THEN-ELSEIF、CASEなどの条件ステートメントが使用されます。
#1)IF-THEN: これは、IFステートメントの基本的な形式の1つです。これには、キーワードENDIFおよびTHENを含むコードのブロックが含まれています。条件の結果がtrueの場合、コードの次のブロックは実行されます。それ以外の場合は実行されません。
IF-THENの構造:
IF condition THEN Block of code END IF;このように、短いIF –THENブロックを1行に保持することもできます。
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をまったくまたは複数持つことができません。 1つの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)ケースステートメント: この条件文は、選択肢から1ブロックのコードを選択します。ただし、IFステートメントと同様に、CASEはブール入力を使用しませんが、オプションの1つを選択するのに役立つ式を使用します。
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またはELSEIF内でELSEIFまたはIFブロックを使用するためのプロビジョニングを提供します。
ネストされた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; /上記のコードの出力は次のようになります。

PLSQLの反復文
PL / SQLでロジックを実装している間、コードのブロックを数回繰り返し処理する必要がある場合があります。これは、LOOPステートメントを使用して実現されます。 これらには3つのタイプがあります。 FOR-LOOP、WHILE-LOOP、およびLOOP。
#1)PL SQL LOOPS
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
このタイプのループでは、コードのブロックを特定の回数実行できます。開始ステップは1回実行されます。これは主に、ループ変数の初期化と宣言に使用されます。次に、境界値(開始範囲と終了範囲)がチェックされます。条件が満たされると、LOOP内のコードブロックが実行されます。そうでない場合、プログラムフローはループの後に次のコードブロックに移動します。
1回の反復の後、ループカウンターは1つ増加または減少します。プロセス全体は、ループ条件が満たされるまで続きます。条件が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の制御文には、ループ文、順次文、制御文の3種類があります。ループステートメントは、WHILE LOOP、FOR LOOP、および基本的なLOOPで構成されます。
Q#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の大部分を取り上げ、複数の演算子やその重要性などのトピックをコード例で扱いました。
また、PLSQL制御ステートメントについても詳しく説明しました。制御ステートメントは、反復、条件、シーケンスなどのプログラム構造で構成されます。
次のチュートリアルでは、PL SQLのプロシージャ、関数、カーソル、およびその他の多くの関連トピックについて説明します。