Values句のサブクエリを許可する理由は何ですか?
-
16-10-2019 - |
質問
例えば
SQL> create table dates(d date);
Table created.
SQL> insert into dates select sysdate from dual;
1 row created.
SQL> select * from dates;
D
---------
28-MAY-11
SQL> insert into dates (d) values (select sysdate fom dual);
insert into dates (d) values (select sysdate fom dual)
*
ERROR at line 1:
ORA-00936: missing expression
SQL>
解決
単一の値のみが許可されている選択ステートメントを使用する場合は、その選択ステートメントをブラケットに入れる必要があります。
insert into dates (d)
values
( (select sysdate from dual) )
複数の列で拡張できます。
insert into dates
(
id,
d,
other_column
)
values
(
some_sequence.nextval,
(select sysdate from dual),
(select max(some_col) from other_table)
)
選択が正確に1つの行と正確に1つの列を返すことを確認する必要があります
他のヒント
私 考える わからない(私はオラクルをしないので、これを試してみる箱がありません)問題はここにあります:
insert into dates (d) values (select sysdate fom dual)
^^^^^^ <- this isn't a date; it expects a date here
代わりにこれを試してください:
insert into dates (d)
select sysdate fom dual
括弧は文法に、パーレン内の値は値ではなく価値であることを伝えているからです。あなたが本当に私がSQL言語仕様であなたのためにそれを調べることができるというもっと詳細な説明が本当に欲しいなら、私は思う。
それは単なる歴史的な事実だと思います。
まだそのように行われていません。
SQL Serverから、2005年から2008年の間にそのような制限をリリースしていることを知っていますが、2005年にそのようなスクリプトを実行したときに問題に就くことがよくあります。
所属していません dba.stackexchange