我的基本想法是
char *table_name;char sql[2000];
memset(sql,0,2000);char key[2000];
memset(key,0,2000);
sprintf(sql,"select * into key from table_name where * ");
execute immedicate :sql;大概想法就是 得到了参数 table_name 将SQL语句写在sql数组里,然后运行。将搜素结果放到key数组里。可是我知道,表名是不可以坐参数的,那应该怎么解决?我大概知道是要用动态SQL ,但是网上的代码找了不少,却弄不明白。似乎都不是在VC的环境下的代码,哪位高人可以指点我一下。不胜感激!
char *table_name;char sql[2000];
memset(sql,0,2000);char key[2000];
memset(key,0,2000);
sprintf(sql,"select * into key from table_name where * ");
execute immedicate :sql;大概想法就是 得到了参数 table_name 将SQL语句写在sql数组里,然后运行。将搜素结果放到key数组里。可是我知道,表名是不可以坐参数的,那应该怎么解决?我大概知道是要用动态SQL ,但是网上的代码找了不少,却弄不明白。似乎都不是在VC的环境下的代码,哪位高人可以指点我一下。不胜感激!
sprintf(sql,"select * into key from %s where * ",table_);
大家见笑了
给你一个动态的SQL吧:
动态sql创建ORACLE存储过程
create or replace procedure p3(v_tname varchar2) as
i number;
m number;
/*v_tname varchar2(10) := 't1';*/
e_createerror exception;
begin
execute immediate 'select count(*) from all_tables where table_name =''' ||
upper(v_tname) || '''' into i;
if i > 0 then
dbms_output.put_line('table is also exists');
execute immediate 'drop table ' || v_tname;
end if;
begin
execute immediate 'create table ' || v_tname || ' (id1 number)';
exception
when others then
raise e_createerror;
end;
execute immediate 'insert into ' || v_tname || ' values (3)';
execute immediate 'insert into ' || v_tname || ' values (3)';
execute immediate 'insert into ' || v_tname || ' values (3)';
execute immediate 'insert into ' || v_tname || ' values (3)';
commit;
execute immediate ' select count(*) from all_tables where table_name =''' ||upper(v_tname) || ''''
into m; if m > 0 then
--execute immediate ' select count(*) from '''||upper(v_tname) || '''' into m;
dbms_output.put_line('good1!');dbms_output.put_line('count of v_tname:'||m);
end if;
exception
when e_createerror then
dbms_output.put_line('表创建语句出错请检查');
end;
/
这个句子是不识别key是数组的,*里面有多少个字段,into 后就应该有多少个变量,只能这样写了