PLプログラムでは、ユーザーがレコードの値をテーブルに挿入したり、1つまたは複数のテーブル行を更新したりできます。ただし、レコード内の要素の数とタイプが完全な行を表現できる必要があります。
適用対象
この内容はOceanBaseデータベースEnterprise Editionにのみ適用されます。OceanBaseデータベースCommunity EditionはMySQLモードのみを提供します。
レコードを更新する際、擬似列ROWはマッチした行を表します。例:
obclient> CREATE TABLE regions(region_id INT,region_name VARCHAR(50));
Query OK, 0 rows affected
obclient> INSERT INTO regions VALUES(1,'Europe'),(2,'Americas'),(3,'Asia'),(4,'Middle East and Africa');
Query OK, 4 rows affected
Records: 4 Duplicates: 0 Warnings: 0
obclient> SELECT * FROM regions;
+-----------+------------------------+
| REGION_ID | REGION_NAME |
+-----------+------------------------+
| 1 | Europe |
| 2 | Americas |
| 3 | Asia |
| 4 | Middle East and Africa |
+-----------+------------------------+
4 rows in set
obclient> DECLARE
TYPE region_record_type IS RECORD (
id REGIONS.region_id%TYPE,
name REGIONS.region_name%TYPE
);
region_record region_record_type;
BEGIN
region_record.id := 5;
region_record.name := 'Antarctica';
insert into REGIONS values region_record;
region_record.id := 3;
region_record.name := 'Asia Update';
update REGIONS set ROW = region_record
where REGION_ID = region_record.id;
end;
/
Query OK, 0 rows affected
obclient> SELECT * FROM regions;
+-----------+------------------------+
| REGION_ID | REGION_NAME |
+-----------+------------------------+
| 1 | Europe |
| 2 | Americas |
| 3 | Asia Update |
| 4 | Middle East and Africa |
| 5 | Antarctica |
+-----------+------------------------+
レコードの挿入と更新には以下の制限があります:
レコード変数は、次の場所でのみ使用できます:
注意
SELECTリスト、WHERE句、GROUP BY句、またはORDER BY句では、レコード変数を使用することはできません。キーワード
ROWはSET句の左側でのみ使用できます。ただし、ROWをサブクエリと一緒に使用することはできません。UPDATEステートメントでROWを使用する場合、SET句は1つだけ使用できます。INSERTステートメントのVALUES句にレコード変数が含まれている場合、その句に他の変数や値を含めることはできません。RETURNING句のINTO句にレコード変数が含まれている場合、その条項に他の変数や値を含めることはできません。
以下の内容はサポートされていません:
ネストされた
RECORD型RECORD型を返す関数EXECUTE IMMEDIATEステートメントを使用したレコードの挿入と更新