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>
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top