Dichiarazione di inserto multi-fila Oracle
-
28-10-2019 - |
Domanda
Un tipo di idiota che Oracle non supporta questo tipo di inserto, come lo farei in Oracle?
INSERT INTO WEBSITE_GATEKEEPER_STATE (PRG_CODE, STATE) VALUES("BPA", "AL"), ("BPA", "AK"), ("BPA", "AS"), ("BPA", "AZ"), ("BPA", "AR"), ("BPA", "AF"),
("BPA", "AA"), ("BPA", "AC"), ("BPA", "AE"), ("BPA", "AM"), ("BPA", "AP"), ("BPA", "CA"), ("BPA", "CO"), ("BPA", "CT"), ("BPA", "DE"), ("BPA", "DC"),
("BPA", "FM"), ("BPA", "FL"), ("BPA", "GA"), ("BPA", "GU"), ("BPA", "HI"), ("BPA", "ID"), ("BPA", "IL"), ("BPA", "IN"), ("BPA", "IA"), ("BPA", "KS"),
("BPA", "KY"), ("BPA", "LA"), ("BPA", "ME"), ("BPA", "MH"), ("BPA", "MD"), ("BPA", "MA"), ("BPA", "MI"), ("BPA", "MN"), ("BPA", "MS"), ("BPA", "MO"),
("BPA", "MT"), ("BPA", "NE"), ("BPA", "NV"), ("BPA", "NH"), ("BPA", "NJ"), ("BPA", "NM"), ("BPA", "NY"), ("BPA", "NC"), ("BPA", "ND"), ("BPA", "MP"),
("BPA", "OH"), ("BPA", "OK"), ("BPA", "OR"), ("BPA", "PW"), ("BPA", "PA"), ("BPA", "PR"), ("BPA", "RI"), ("BPA", "SC"), ("BPA", "SD"), ("BPA", "TN"),
("BPA", "TX"), ("BPA", "UT"), ("BPA", "VT"), ("BPA", "VI"), ("BPA", "VA"), ("BPA", "WA"), ("BPA", "WV"), ("BPA", "WI"), ("BPA", "WY");
Soluzione
Come questo forse: http://www.techonthenet.com/oracle/questions/insert_rows.php
Altri suggerimenti
Suppongo che dipenda dalla definizione di "idiota". Questa cosa è il tipo di caricamento di dati che dovremmo fare solo occasionalmente. Quindi non è davvero una grande difficoltà usare Cut'n'Paste per produrre una sceneggiatura che si adatta alla sintassi disponibile.
O grep
. Ho usato Regex in un editor per trasformare il tuo codice in codice PL/SQL praticabile. Controlla:
declare
strs dbms_debug_vc2coll;
begin
strs := dbms_debug_vc2coll ( 'AL', 'AK', 'AS', 'AZ', 'AR', 'AF',
'AA', 'AC', 'AE', 'AM', 'AP', 'CA', 'CO', 'CT', 'DE', 'DC',
'FM', 'FL', 'GA', 'GU', 'HI', 'ID', 'IL', 'IN', 'IA', 'KS',
'KY', 'LA', 'ME', 'MH', 'MD', 'MA', 'MI', 'MN', 'MS', 'MO',
'MT', 'NE', 'NV', 'NH', 'NJ', 'NM', 'NY', 'NC', 'ND', 'MP',
'OH', 'OK', 'OR', 'PW', 'PA', 'PR', 'RI', 'SC', 'SD', 'TN',
'TX', 'UT', 'VT', 'VI', 'VA', 'WA', 'WV', 'WI', 'WY');
INSERT INTO WEBSITE_GATEKEEPER_STATE (PRG_CODE, STATE)
select 'PA', column_value
from table ( select * from strs );
end;
/
È possibile utilizzare e variabile_name per inserire i valori in fase di esecuzione invece di scrivere ogni nuova affermazione.
For example -
INSERT INTO WEBSITE_GATEKEEPER_STATE (PRG_CODE, STATE)
VALUES(&PRG_CODE, &STATE);
INSERT ALL
INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
INTO mytable (column1, column2, column_n) VALUES (expr1, expr2, expr_n)
SELECT * FROM dual;
o ...
insert into mytable (column1, column2, .. columnn)
select value1, value2 ... valuen from dual
union all select value1, value2 ... valuen from dual
da questa parte
DECLARE
var_sql clob;
var_bpa varchar2(3):='BPA';
BEGIN
var_sql := 'insert all ';
var_sql :=var_sql||' into website_gatekeeper_state (prg_code, state)
values('''||var_bpa||''', ''AL'')';
var_sql :=var_sql||' into website_gatekeeper_state (prg_code, state)
values('''||var_bpa||''', ''AF'')';
var_sql :=var_sql||' into website_gatekeeper_state (prg_code, state)
values('''||var_bpa||''', ''AM'')';
var_sql :=var_sql||' into website_gatekeeper_state (prg_code, state)
values('''||var_bpa||''', ''AP'')';
var_sql :=var_sql||' into website_gatekeeper_state (prg_code, state)
values('''||var_bpa||''', ''DC'')';
var_sql :=var_sql||' select 1 from dual ';
EXECUTE IMMEDIATE var_sql;
END;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow