Was könnte der Grund dafür sein, eine Unterabfrage in der Werteklausel abzubauen?
-
16-10-2019 - |
Frage
Zum Beispiel
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>
Lösung
Wenn Sie eine Auswahlanweisung verwenden möchten, bei der nur ein einzelner Wert zulässig ist, müssen Sie diese Auswahlanweisung in Klammern einfügen:
insert into dates (d)
values
( (select sysdate from dual) )
Dies könnte für mehrere Spalten erweitert werden:
insert into dates
(
id,
d,
other_column
)
values
(
some_sequence.nextval,
(select sysdate from dual),
(select max(some_col) from other_table)
)
Sie müssen nur sicherstellen, dass die Auswahl genau eine Zeile und genau eine Spalte zurückgibt
Andere Tipps
ich denken Ohne zu wissen (ich mache kein Orakel, habe ich also keine Box, um dies zu versuchen), dass das Problem hier ist:
insert into dates (d) values (select sysdate fom dual)
^^^^^^ <- this isn't a date; it expects a date here
Versuchen Sie es stattdessen:
insert into dates (d)
select sysdate fom dual
Weil die Klammern der Grammatik mitteilt, dass der Wert im Pfarrer ein Wert ist, keine Wertschöpfung. Ich nehme an, wenn Sie wirklich eine unabhängigere Erklärung wollen, dass ich in der SQL -Sprachspezifikation für Sie nachschlagen könnte.
Ich denke, es ist nur eine historische Tatsache.
Es ist einfach noch nicht so gemacht.
Von SQL Server weiß ich, dass sie zwischen 2005 und 2008 solche Einschränkungen veröffentlichen, und wir haben häufig Probleme, wenn wir solche Skripte im Jahr 2005 ausführen.