PL/SQL は、開発者が SQL の機能と手続き型ステートメントを組み合わせることを可能にするブロック構造言語です。ブロックのすべてのステートメントは一度に Oracle エンジンに渡されるため、処理速度が向上し、トラフィックが減少します。
PL/SQLの基本
- •PL/SQL は、Structured Query Language (SQL) の Procedural Language extensions の略です。
- PL/SQL は、SQL とプログラミング言語の手続き型機能を組み合わせたものです。
- Oracle は PL/SQL エンジンを使用して PL/SQL ステートメントを処理します。
- PL/SQL には、条件やループなどの手続き型言語要素が含まれています。定数と変数、プロシージャと関数、型とそれらの型の変数、およびトリガーの宣言が可能です。
SQL の欠点:
- SQL はプログラマに条件チェック、ループ、分岐などの手法を提供しません。
- SQL ステートメントは一度に 1 つずつ Oracle エンジンに渡されるため、トラフィックが増加し、速度が低下します。
- SQL には、データ操作中のエラー チェック機能がありません。
PL/SQL の特徴:
- PL/SQL は基本的に手続き型言語であり、意思決定、反復などの手続き型プログラミング言語の機能を提供します。
- PL/SQL では、1 つのコマンドを使用して 1 つのブロックで多数の問合せを実行できます。
- プロシージャ、ファンクション、パッケージ、トリガー、タイプなどのPL/SQLユニットを作成し、アプリケーションで再利用できるようにデータベースに保存できます。
- PL/SQLには、例外処理ブロックと呼ばれる、PL/SQLブロックで発生した例外を処理する機能が用意されています。
- PL/SQL で作成されたアプリケーションは、Oracle が動作しているコンピュータ ハードウェアまたはオペレーティング システムに移植できます。
- PL/SQL 広範なエラー チェックを提供します。
SQL と PL/SQL の違い:
SQL | PL/SQL |
SQL は、DML および DDL 操作を実行するために使用される単一のクエリです。 | PL/SQL は、プログラム ブロック/プロシージャ/関数など全体を記述するために使用されるコードのブロックです。 |
これは宣言的であり、物事をどのように行う必要があるかではなく、何を行う必要があるかを定義します。 | PL/SQL は、物事をどのように実行する必要があるかを定義する手続き型です。 |
単一のステートメントとして実行します。 | ブロック全体として実行します。 |
主にデータ操作に使用されます。 | 主にアプリケーションを作成するために使用されます。 |
PL/SQL コードを含めることはできません。 | これは SQL の拡張機能であるため、内部に SQL を含めることができます。 |
PL/SQL ブロックの構造:
PL/SQL は、手続き型言語にある構造を追加することで SQL を拡張し、結果として SQL よりも強力な構造言語を実現します。 PL/SQL の基本単位はブロックです。すべての PL/SQL プログラムはブロックで構成されており、相互にネストすることができます。
通常、各ブロックはプログラム内の論理アクションを実行します。ブロックは次のような構造になっています。
Java文字列のトリム
DECLARE declaration statements; BEGIN executable statements EXCEPTIONS exception handling statements END;>
- 宣言セクションは次で始まります 宣言する データを一時的に保存する変数、定数、カーソルとしてのレコードを宣言できるキーワード。基本的には PL/SQL 識別子の定義で構成されます。コードのこの部分はオプションです。
- 実行セクションは次で始まります 始める そして次で終わります 終わり これは必須のセクションであり、ループや条件文などのタスクを実行するためのプログラム ロジックがここに記述されます。全てをサポートしてくれます DML コマンド、 DDL コマンドと SQL*PLUS 組み込み関数も同様です。
- 例外セクションは次で始まります 例外 キーワード。このセクションはオプションであり、実行時エラーが発生したときに実行されるステートメントが含まれます。例外はすべてこのセクションで処理できます。
PL/SQL識別子
変数、定数、プロシージャ、カーソル、トリガーなど、いくつかのPL/SQL識別子があります。
- 変数 注: 他のいくつかのプログラミング言語と同様、PL/SQL の変数は使用前に宣言する必要があります。有効な名前とデータ型も必要です。変数宣言の構文:
variable_name datatype [NOT NULL := value ];>
- PL/SQL で変数を宣言する方法を示す例:
C
JavaScript 演算子
SQL>サーバー出力をオンに設定します;>> SQL>宣言する> > var1 INTEGER;> > var2 REAL;> > var3 varchar2(20) ;> BEGIN> > null;> END;> /> |
>
>
- 出力:
PL/SQL procedure successfully completed.>
- 説明:
- サーバー出力をオンに設定 : dbms_output で使用されるバッファを表示するために使用されます。
- var1 整数 : という名前の変数の宣言です。 var1 これは整数型です。 float、int、real、smallint、long など、使用できるデータ型は他にもたくさんあります。また、SQL で使用される変数や、NUMBER(prec,scale)、varchar、varchar2 などもサポートしています。
- PL/SQL プロシージャが正常に完了しました。: コードがコンパイルされ、正常に実行されると表示されます。
- END の後にスラッシュ (/);: スラッシュ (/) は、SQL*Plus にブロックを実行するように指示します。
- 代入演算子 (:=) : 変数に値を代入するために使用されます。
- 出力の表示 : 出力は、ユーザーが出力、デバッグ情報を表示し、PL/SQL ブロック、サブプログラム、パッケージおよびトリガーからメッセージを送信できるようにする組み込みパッケージである DBMS_OUTPUT を使用して表示されます。 PL/SQL を使用してメッセージを表示する方法を示す例を見てみましょう。
C
SQL>サーバー出力をオンに設定します;>> SQL>宣言する> > var varchar2(40) :=> 'I love GeeksForGeeks'> ;> > BEGIN> > dbms_output.put_line(var);> > END;> > /> |
>
>
- 出力:
I love GeeksForGeeks PL/SQL procedure successfully completed.>
- 説明:
- dbms_output.put_line : このコマンドは、PL/SQL 出力を画面に送信するために使用されます。
- コメントの使用 : 他の多くのプログラミング言語と同様に、PL/SQL でも、コード内にコメントを挿入できますが、コードには影響を与えません。 PL/SQL でコメントを作成するには、次の 2 つの構文があります。
- 単一行コメント: 単一行のコメントを作成するには、記号– –使用されている。
- 複数行のコメント: 複数行にわたるコメントを作成するには、記号/*そして*/使用されている。
- ユーザーからの意見を受け取る : 他のプログラミング言語と同様に、PL/SQL でもユーザーから入力を取得して変数に格納できます。 PL/SQL でユーザーから入力を取得する方法を示す例を見てみましょう。
C
アメリカは都市はいくつありますか
SQL>サーバー出力をオンに設定します;>> SQL>宣言する> > -- taking input> for> variable a> > a number := &a;> > > -- taking input> for> variable b> > b varchar2(30) := &b;> > BEGIN> > null;> > END;> > /> |
>
>
- 出力:
Enter value for a: 24 old 2: a number := &a; new 2: a number := 24; Enter value for b: 'GeeksForGeeks' old 3: b varchar2(30) := &b; new 3: b varchar2(30) := 'GeeksForGeeks'; PL/SQL procedure successfully completed.>
- (***) PL/SQL の例を見て、上記のすべての概念を 1 つのコード ブロックで示してみましょう。
C
--PL/SQL code to print sum of two numbers taken from the user.> SQL>サーバー出力をオンに設定します;>> SQL>宣言する> > > -- taking input> for> variable a> > a integer := &a ;> > > -- taking input> for> variable b> > b integer := &b ;> > c integer ;> > BEGIN> > c := a + b ;> > dbms_output.put_line(> 'Sum of '> ||a||> ' and '> ||b||> ' is = '> ||c);> > END;> > /> |
>
>
Cでの二次元配列プログラム
Enter value for a: 2 Enter value for b: 3 Sum of 2 and 3 is = 5 PL/SQL procedure successfully completed.>
PL/SQL実行環境:
PL/SQL エンジンは Oracle エンジン内にあります。Oracle エンジンは、単一の SQL 文だけでなく、多数の文のブロックも処理できます。これらの SQL 文が存在する場合、Oracle エンジンへの呼び出しは、任意の数の SQL 文を実行するために 1 回だけ行う必要があります。 PL/SQL ブロック内にバンドルされています。