OracleのINSERT構文を調べるだけで、クエリに挿入することができます。クエリに挿入
insert into (select * from dept) (deptno, dname) values (99, 'new department');
これは何を意味するのですか?私はテーブルに直接挿入することができないクエリに挿入することで何を達成できますか?
UPDATE:はこれまでのところ、単なる代替構文であると思われるので、私は
insert into (select deptno, dname from dept) values (99, 'new department');
代わりの
insert into dept (deptno, dname) values (99, 'new department');
同じこと、同じ実行計画を作成することができます。クエリがレコードを返すかどうかは関係ありません。これは:
insert into (select deptno, dname from dept where 1 = 0) values (99, 'new department');
が同じ実行計画に再びつながります。したがって、1つのテーブルから列を選択するだけでは、サブクエリがどのように見えるかは実際には関係ありません。しかし、いいえ。この:か:「非キー保存表にマップする列変更することはできませんORA-01779」、「ORA-01732を:このビューのデータ操作操作は有効ではありません」
insert into (select deptno, dname from dept cross join some_table)
values (99, 'new department');
がにつながります。
Oracleは、ビューに挿入できるようにするために、問合せに挿入することを決定したという印象を持っています。それ以外のサブクエリは、次にアドホック・ビューですか?だから、あなたがビューに挿入することができれば、確かにあなたはアドホックなビューにも挿入できるようになりますが、正しい考え方の誰もこの構文を使用することはありません:-)
多分私は間違っていますか?たぶん、この構文は私がまだ認識していない何かを提供しているのでしょうか?その場合は:-)
ああ、これは単なる代替構文だと言っていますか?私は 'dept(deptno、dname)の値(...)'または '(deptno、deptからの名前の選択)値(...)'に挿入することができます。それは同じことを書いているもう一つの方法であり、他のものよりも利点がありません。 –
基本的にはい - 私は可能性のある分派を研究していませんが。ドキュメントに基づいて私はそれらを期待していなかったでしょう、あなたが 'insert'特権を持ち、それぞれのテーブルで' select'を持っていない限り。 – collapsar