Quale potrebbe essere la ragione per non consentire una query sub nella clausola valori?
-
16-10-2019 - |
Domanda
Ad esempio
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>
Soluzione
Se si desidera utilizzare un'istruzione SELECT in cui è consentito solo un singolo valore è necessario mettere che SELECT tra parentesi:
insert into dates (d)
values
( (select sysdate from dual) )
Questo potrebbe essere esteso per più colonne:
insert into dates
(
id,
d,
other_column
)
values
(
some_sequence.nextval,
(select sysdate from dual),
(select max(some_col) from other_table)
)
Hai solo bisogno di fare in modo che i rendimenti selezionare esattamente una riga e esattamente una colonna
Altri suggerimenti
I pensare senza sapere (non faccio Oracle in modo da non avere una casella di provare questa via) che il problema è qui:
insert into dates (d) values (select sysdate fom dual)
^^^^^^ <- this isn't a date; it expects a date here
Prova questo, invece:
insert into dates (d)
select sysdate fom dual
Perché la parentesi indica la grammatica che il valore all'interno delle parentesi è un valore, non un valore di produzione dichiarazione. Suppongo che, se si vuole veramente una spiegazione più approfondita che potevo andare a cercare che per voi nelle specifiche linguaggio SQL.
Credo che sia solo un fatto storico.
E 'solo non è ancora fatto in quel modo.
Da SQL Server So che stanno rilasciando tali restrizioni tra il 2005 e il 2008 e spesso passo rifugio in problemi quando si corre tali script al 2005.