我现在有一张表test。
ID NUMBER not null,
NAME VARCHAR2(60) not null,
DESC VARCHAR2(120),
ARGUMENT1 VARCHAR2(240),
ARGUMENT2 VARCHAR2(240),
ARGUMENT3 VARCHAR2(240),
ARGUMENT4 VARCHAR2(240),
ARGUMENT5 VARCHAR2(240),
ARGUMENT6 VARCHAR2(240),
ARGUMENT7 VARCHAR2(240),
ARGUMENT8 VARCHAR2(240),
ARGUMENT9 VARCHAR2(240),
ARGUMENT10 VARCHAR2(240),
STATUS VARCHAR2(20)我现在要在存储过程中向这张表中插入数据,ID ,name,desc,status这几个字段还能拼出来。但是ARGUMENT要怎么拼呢?
也就是说ARGUMENT的个数 是动态的。给了我几个我就插入几个,如:给了我6个ARGUMENT。我就要得到
insert into test(id,name,desc,status,ARGUMENT1,ARGUMENT2,ARGUMENT3,ARGUMENT4)values('1001','test','test','error','ARGUMENT','ARGUMENT','ARGUMENT','ARGUMENT');
红色部分怎么拼出来呢?
ID NUMBER not null,
NAME VARCHAR2(60) not null,
DESC VARCHAR2(120),
ARGUMENT1 VARCHAR2(240),
ARGUMENT2 VARCHAR2(240),
ARGUMENT3 VARCHAR2(240),
ARGUMENT4 VARCHAR2(240),
ARGUMENT5 VARCHAR2(240),
ARGUMENT6 VARCHAR2(240),
ARGUMENT7 VARCHAR2(240),
ARGUMENT8 VARCHAR2(240),
ARGUMENT9 VARCHAR2(240),
ARGUMENT10 VARCHAR2(240),
STATUS VARCHAR2(20)我现在要在存储过程中向这张表中插入数据,ID ,name,desc,status这几个字段还能拼出来。但是ARGUMENT要怎么拼呢?
也就是说ARGUMENT的个数 是动态的。给了我几个我就插入几个,如:给了我6个ARGUMENT。我就要得到
insert into test(id,name,desc,status,ARGUMENT1,ARGUMENT2,ARGUMENT3,ARGUMENT4)values('1001','test','test','error','ARGUMENT','ARGUMENT','ARGUMENT','ARGUMENT');
红色部分怎么拼出来呢?
另外他调你的时候,参数怎么传的?一个参数一个IN参数,还是N个参数作为一个字符串中间用特殊字符隔开只用了一个IN?
create。
as
v_sql varchar2(4000):='insert into test(id,name,desc,status';
...
begin
if 有几个参数 then
for i in 1..几 loop
v_sql := v_sql||',ARGUMENT'||to_char(i);
end loop
v_sql := v_sql||')values('........)';
execute immediate v_sql;
......
end;
/
那么我们直接写成
str_sql := 'insert into test values (''1001'',''test'',''test'',''error'', :str_param1,:str_param2...:str_param10)';
execute immediate str_sql using str_param1, str_param2...str_param10;我们只要给将得到的几个参数赋值给对应的 str_paramX 即可,str_paramX 默认值就随便给一个,不是就行了?
我的for 是这样的,怎么实现呢?
for results in myCursor(s_proname)
loop
v_sql:=v_sql;
end loop;
create or ....(arg1 varchar2 default null,.....insert into test(id,name,desc,status,ARGUMENT1,ARGUMENT2,ARGUMENT3,ARGUMENT4,....ARGUMENT10)values('1001','test','test','erro',arg1值,arg2值arg3值);
v_sql varchar2(2000):='insert into test(id,name,desc,status';
v_values varchar2(2000):='values('1001','test','test','error';
v_no number(2):=1;
我的for 是这样的,怎么实现呢?for results in myCursor(s_proname)
loop
v_sql:=v_sql||',ARGUMENT'||to_char(v_no);
v_values := v_values||','||results.paramValue;
v_no :=v_no+1;
end loop;
close myCursor;--不知道怎么关这个游标execute immediate v_sql||')'||v_values||')';