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>
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top