次のスタイルを使用してテーブルに複数の行を挿入する場合:
insert all
into ghazal_current (GhazalName,Rating) values('Ajab Apna Haal Hota Jo Visaal-e-Yaar Hota',5)
into ghazal_current (GhazalName,Rating) values('Apne Hothon Par Sajana Chahta Hun',4)
into ghazal_current (GhazalName,Rating) values('Shaam Se Aankh Mein Nami Si Hai',4)
into ghazal_current (GhazalName,Rating) values('Tumhe Yaad Ho Ke Na Yaad Ho',3)
select 1 from dual;
ステートメントは何ですかselect 1 from dual
意味?ここは何のためですか?
一部のSQLデータベースでは、すべての値を取得する必要があります[〜#〜] from [〜#〜]テーブルまたはテーブルのようなオブジェクトですが、その他のデータベースでは、クエリで値を作成できますex nihilo :
_-- MySQL, sqlite, PostgreSQL, HSQLdb, and many others permit
-- a "naked" select:
SELECT 1;
-- Others *require* a FROM target, like Oracle.
SELECT 1 FROM DUAL;
-- ...and Firebird/Interbase:
SELECT 1 FROM RDB$DATABASE;
-- ...and DB2:
SELECT 1 FROM SYSIBM.SYSDUMMY1;
_
ここでは、DUALのカーディナリティが重要です。複数の行がある場合、結果セットには複数の行が含まれます。たとえば、_SELECT 1 FROM A_Table_With_Ten_Rows
_の場合はどうなりますか?
SQLコンストラクターVALUES (<row-value-expression>)
は行値コンストラクターです。 VALUES (1, 2, 3)
は、_SELECT 1, 2, 3
_と同じように、値の行を「作成」します。
もちろん、Oracleでは、これらの値が[〜#〜] from [〜#〜]どこかにある必要があります。
デモンストレーションとして、INSERT ALLの最後でDUALからSELECTする代わりに、[〜#〜] n [〜#〜]行のテーブルを試してみてください。各VALUES()
行が挿入されます[〜#〜] n [〜#〜]回。