sql >> Databasteknik >  >> RDS >> Oracle

Infoga data i tabell med Execute Immediate i Oracle

Du kan antingen hämta resultatet av den första frågan till en (datum)variabel och sedan använda den:

SELECT sysdate into query_date FROM dual;
insert into test (my_date) values (query_date)
-- or if you really want dynamic SQL, with a bind variable
EXECUTE IMMEDIATE 'insert into test (my_date) values (:query_date)' using query_date;

Eller läs din fråga bokstavligt, använd den första strängen som en del av den andra strängen genom att sammanfoga den:

query_date := "SELECT sysdate FROM dual";
EXECUTE IMMEDIATE 'insert into test (my_date) ' || query_date;

Om du skrev ut den andra satsen istället för att köra den skulle du se:

insert into test (my_date) SELECT sysdate FROM dual

... som är giltig SQL. Detta fungerar om query_string är mer komplicerad eller byggs i sig dynamiskt. Men om antalet kolumnuttryck i query_string Select list varierar också, du måste konstruera kolumnlistan dynamiskt också, annars kommer du att ha för många eller för få kolumner för infogningen.

Exakt hur du gör det beror på hur du konstruerar frågesträngen - i huvudsak när du lägger till ett uttryck till frågesträngen, skulle du också lägga till ett kolumnnamn i en separat lista och sluta med:

EXECUTE IMMEDIATE 'insert into test (' || column_list ' ||) ' || query_string);

där column_list är uppbyggd som säg col1, col2 och query_string som select x.col1, y.col2 from ... .

Det finns ingen uppenbar anledning att använda dynamisk SQL i det du har visat. Eller, om du verkligen använder sysdate, något behov av separat fråga för att få det, som du bara kan göra:

insert into test (my_date) values (sysdate)

... så jag antar att ditt verkliga scenario verkligen är mer komplicerat. Men observera att du inte använder values nyckelord med en insert ... select ... mönster. Du kan med en enda kolumn och en underfråga, men det är inte en bra idé även då, och det fungerar inte om du har flera kolumner i underfrågan.



  1. Fel:Tabell 'mysql.proc' existerar inte när du lägger till MySQL-datakälla till Visual Studio-projektet

  2. Hur man exporterar clob-fältdata i oracle sql-utvecklare

  3. MySQL felkod:1175 under UPPDATERING i MySQL Workbench

  4. php mySQL grupp sammanfoga och gruppera efter