我的基本想法是
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的环境下的代码,哪位高人可以指点我一下。不胜感激!

解决方案 »

  1.   

    打字不小心
    sprintf(sql,"select * into key from %s where * ",table_); 
    大家见笑了
      

  2.   

    在程序里面拼接好正确的sql语句,直接执行就行了
      

  3.   


    给你一个动态的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;
    /
      

  4.   

    select * into key from table_name where 
    这个句子是不识别key是数组的,*里面有多少个字段,into 后就应该有多少个变量,只能这样写了
      

  5.   

    pro*c里面用动态SQL:EXEC SQL EXECUTE IMMEDIATE :sqlstr;其中sqlstr就是一个包含sql语句的字符串。