Oracle PL/SQL の挿入、更新、削除、選択 [例]
このチュートリアルでは、次の使用方法を学習します。 SQL PL/SQLで。 SQL はデータベース内のデータのフェッチと更新を処理する実際のコンポーネントですが、PL/SQL はこれらのデータを処理するコンポーネントです。 さらに、この記事では、PL/SQL ブロック内で SQL を結合する方法についても説明します。
PL/SQLのDMLトランザクション
DMLはの略です データ操作言語これらのステートメントは主に操作アクティビティを実行するために使用されます。以下の操作を扱います。
- データの挿入
- データ更新
- データの削除
- データの選択
PL/SQL では、SQL コマンドを使用するだけでデータ操作を行うことができます。
データの挿入
PL/SQL では、SQL コマンド INSERT INTO を使用して、任意の表にデータを挿入できます。 このコマンドは、テーブル名、テーブルの列、および列の値を入力として受け取り、その値をベース テーブルに挿入します。
INSERT コマンドは、各列の値を指定するのではなく、「SELECT」ステートメントを使用して別のテーブルから直接値を取得することもできます。 「SELECT」ステートメントを使用すると、ベース テーブルに含まれる行と同じ数の行を挿入できます。
構文:
BEGIN INSERT INTO <table_name>(<column1 >,<column2>,...<column_n>) VALUES(<valuel><value2>,...:<value_n>); END;
- 上記の構文は INSERT INTO コマンドを示しています。 テーブル名と値は必須フィールドですが、挿入ステートメントにテーブルのすべての列の値が含まれる場合、列名は必須ではありません。
- 上記のように値を個別に指定する場合、キーワード「VALUES」は必須です。
構文:
BEGIN INSERT INTO <table_name>(<columnl>,<column2>,...,<column_n>) SELECT <columnl>,<column2>,.. <column_n> FROM <table_name2>; END;
- 上記の構文は、値を直接取得する INSERT INTO コマンドを示しています。 SELECTコマンドを使用します。
- この場合、値は個別に指定されないため、キーワード「VALUES」は存在しないでください。
データ更新
データ更新とは、単にテーブル内の任意の列の値を更新することを意味します。 これは「UPDATE」ステートメントを使用して実行できます。 このステートメントは、テーブル名、列名、および値を入力として受け取り、データを更新します。
構文:
BEGIN UPDATE <table_name> SET <columnl>=<VALUE1>,<column2>=<value2>,<column_n>=<value_n> WHERE <condition that uniquely identifies the record that needs to be update>; END;
- 上記の構文は UPDATE を示しています。 キーワード「SET」は、指定された値で列の値を更新するようにPL/SQLエンジンに指示します。
- 「WHERE」句はオプションです。 この句が指定されていない場合、テーブル全体の指定された列の値が更新されます。
データの削除
データの削除とは、データベース テーブルから XNUMX つの完全なレコードを削除することを意味します。 この目的には「DELETE」コマンドが使用されます。
構文:
BEGIN DELETE FROM <table_name> WHERE <condition that uniquely identifies the record that needs to be update>; END;
- 上記の構文は DELETE コマンドを示しています。 キーワード「FROM」はオプションであり、「FROM」句の有無にかかわらず、コマンドは同じように動作します。
- 「WHERE」句はオプションです。 この句が指定されていない場合は、テーブル全体が削除されます。
データの選択
データのプロジェクション/フェッチとは、データベース テーブルから必要なデータを取得することを意味します。 これは、「INTO」句を指定したコマンド「SELECT」を使用することで実現できます。 「SELECT」コマンドはデータベースから値をフェッチし、「INTO」句はこれらの値をローカル変数に割り当てます。 PL/SQLブロック.
「SELECT」文で考慮する必要がある点は次のとおりです。
- XNUMX つの変数は XNUMX つの値しか保持できないため、「INTO」句を使用する場合、「SELECT」ステートメントは XNUMX つのレコードのみを返す必要があります。 「SELECT」ステートメントが「TOO_MANY_ROWS」を超える値を返す場合、例外が発生します。
- 「SELECT」ステートメントは「INTO」句の変数に値を割り当てるため、値を設定するにはテーブルから少なくとも XNUMX つのレコードを取得する必要があります。 レコードを取得できなかった場合は、例外「NO_DATA_FOUND」が発生します。
- 「SELECT」句の列の数とそのデータ型は、「INTO」句の変数の数とそのデータ型と一致する必要があります。
- 値は、ステートメントで説明されているのと同じ順序でフェッチされ、設定されます。
- 「WHERE」句はオプションであり、フェッチされるレコードに対してさらに制限を加えることができます。
- 「SELECT」ステートメントは、他の DML ステートメントの「WHERE」条件で使用して、条件の値を定義できます。
- 「INSERT」、「UPDATE」、「DELETE」ステートメントを使用する場合の「SELECT」ステートメントには、変数が設定されないため、「INTO」句を含めないでください。
構文:
BEGIN SELECT <columnl>,..<column_n> INTO <vanable 1 >,. .<variable_n> FROM <table_name> WHERE <condition to fetch the required records>; END;
- 上記の構文は、SELECT-INTO コマンドを示しています。 データをフェッチする必要があるテーブル名を識別するキーワード「FROM」は必須です。
- 「WHERE」句はオプションです。 この句が指定されていない場合は、テーブル全体からデータがフェッチされます。
例この例では、DML操作を実行する方法を見ていきます。 PL / SQLの。 以下の XNUMX つのレコードを emp テーブルに挿入します。
EMP_NAME | EMP_NO | 給料 | MANAGER |
---|---|---|---|
BBB | 1000 | 25000 | 単4 |
XXX | 1001 | 10000 | BBB |
YYY | 1002 | 10000 | BBB |
ZZZ | 1003 | 7500 | BBB |
次に、「XXX」の給与を 15000 に更新し、従業員レコード「ZZZ」を削除します。最後に、従業員「XXX」の詳細を投影します。
DECLARE l_emp_name VARCHAR2(250); l_emp_no NUMBER; l_salary NUMBER; l_manager VARCHAR2(250); BEGIN INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES(‘BBB’,1000,25000,’AAA’); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES('XXX',1001,10000,’BBB); INSERT INTO emp(emp_name,emp_no,salary,managed VALUES(‘YYY',1002,10000,'BBB'); INSERT INTO emp(emp_name,emp_no,salary,manager) VALUES(‘ZZZ',1003,7500,'BBB'): COMMIT; Dbms_output.put_line(‘Values Inserted'); UPDATE EMP SET salary=15000 WHERE emp_name='XXX'; COMMIT; Dbms_output.put_line(‘Values Updated'); DELETE emp WHERE emp_name='ZZZ'; COMMIT: Dbms_output.put_line('Values Deleted ); SELECT emp_name,emp_no,salary,manager INTO l_emp_name,l_emp_no,l_salary,l_manager FROM emp WHERE emp_name='XXX'; Dbms output.put line(‘Employee Detail’); Dbms_output.put_line(‘Employee Name:‘||l_emp_name); Dbms_output.put_line(‘Employee Number:‘||l_emp_no); Dbms_output.put_line(‘Employee Salary:‘||l_salary); Dbms output.put line(‘Emplovee Manager Name:‘||l_manager): END; /
出力:
Values Inserted Values Updated Values Deleted Employee Detail Employee Name:XXX Employee Number:1001 Employee Salary:15000 Employee Manager Name:BBB
コードの説明:
- コード行 2 ~ 5: 変数を宣言します。
- コード行 7 ~ 14: レコードを emp テーブルに挿入します。
- コード行 15: 挿入トランザクションをコミットしています。
- コード行 17 ~ 19: 従業員「XXX」の給与を 15000 に更新します
- コード行 20: 更新トランザクションをコミットしています。
- コード行 22:「ZZZ」の記録を削除します
- コード行 23: 削除トランザクションをコミットしています。
- コード行 25 ~ 27: 「XXX」のレコードを選択し、変数 l_emp_name、l_emp_no、l_salary、l_manager に値を設定します。
- コード行 28 ~ 32: 取得したレコードの値を表示します。