Sql Oracle多行插入语句

Sql Oracle多行插入语句,sql,oracle,sql-insert,Sql,Oracle,Sql Insert,Oracle不支持这种类型的插入,这有点愚蠢,我该如何在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

Oracle不支持这种类型的插入,这有点愚蠢,我该如何在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");

也许像这样:

也许像这样:

我想这取决于一个人对“白痴”的定义。这是我们应该偶尔进行的数据加载。因此,使用剪切粘贴来生成符合可用语法的脚本并不是一个很大的困难

grep
。我在编辑器中使用正则表达式将代码转换为可行的PL/SQL代码。请查看:

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;
 /  

我想这取决于一个人对“白痴”的定义。这是我们应该偶尔进行的数据加载。因此,使用剪切粘贴来生成符合可用语法的脚本并不是一个很大的困难

grep
。我在编辑器中使用正则表达式将代码转换为可行的PL/SQL代码。请查看:

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;
 /  
这样

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;
这样

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;

您可以使用&variable_name在运行时输入值,而不是编写每个新语句

For example -
 INSERT INTO WEBSITE_GATEKEEPER_STATE (PRG_CODE, STATE) 
 VALUES(&PRG_CODE, &STATE);

您可以使用&variable_name在运行时输入值,而不是编写每个新语句

For example -
 INSERT INTO WEBSITE_GATEKEEPER_STATE (PRG_CODE, STATE) 
 VALUES(&PRG_CODE, &STATE);
或者

insert into mytable (column1, column2, .. columnn)
          select value1, value2 ... valuen from dual
union all select value1, value2 ... valuen from dual
或者

insert into mytable (column1, column2, .. columnn)
          select value1, value2 ... valuen from dual
union all select value1, value2 ... valuen from dual

也许是这样的:你为什么不把答案贴出来?它工作,所以我会选择作为答案,如果你作为一个。重复:。请注意,这里的PL/SQL没有什么特别之处—它只是Oracle SQL,也可以在PL/SQL上下文中执行。可能是@user272735的重复项—不,它不是重复项。Oracle很愚蠢,不能使用std SQL92代码来实现这一点。不管怎么说,WTF是双重的,如果你问我的话,有点愚蠢。也许像这样:你为什么不发布答案?它工作,所以我会选择作为答案,如果你作为一个。重复:。请注意,这里的PL/SQL没有什么特别之处—它只是Oracle SQL,也可以在PL/SQL上下文中执行。可能是@user272735的重复项—不,它不是重复项。Oracle很愚蠢,不能使用std SQL92代码来实现这一点。不管怎样,WTF是双重的,如果你问我的话,有点愚蠢。写多个INSERT语句(每行一个)有什么好处?开销很小。游标共享不能很好地与没有绑定变量的SQL配合使用,因此类似于单行insert语句的每次迭代都需要重新解析。实际上,除非加载大量的行,否则这并不是什么大问题,而OP似乎没有这样做。如果需要加载大量的行,那么一个预先准备好的语句,甚至SQL*Loader都是一个更好的选择。您可以在答案中添加一个示例,而不仅仅是外部链接-这使未来的访问者更容易访问,并防止链接腐化降低您的答案的价值…与编写多个INSERT语句(每行一个)相比,有什么优势?少量的开销。游标共享不能很好地与没有绑定变量的SQL配合使用,因此类似于单行insert语句的每次迭代都需要重新解析。实际上,除非加载大量的行,否则这并不是什么大问题,而OP似乎没有这样做。如果需要加载大量的行,一个预先准备好的语句,甚至SQL*Loader都是一个更好的选择。您可以在答案中添加一个示例,而不仅仅是外部链接-它使未来的访问者更容易访问,并防止链接腐化降低您的答案的价值。。。