怎样使字符变量变成系统识别的表名或列名

解决方案 »

  1.   

    使用execute immediate例如:
    declare 
    v_sql varchar2(400);
    v_tablename varchar2(30);
    l_cnt number;
    begin
      v_tablename:= table_name;
      v_sql := 'select count(1) from '||v_tablename;  execute immediate v_sql into l_cnt;  
      dbms_output.put_line(l_cnt);
    end;
    /
      

  2.   

    declare v_tab varchar2;
    v_tab := 'a'; execute immediate 'select count(1) from '|| V_systab || ';
    正确吗?
      

  3.   

    declare 
      v_tab varchar2;
      l_cnt number;
    begin
      v_tab := 'a';
      execute immediate 'select count(1) from '|| v_tab into l_cnt;  -- 使用into ,pl/sql里不能使用select * 返回结果集的. 
    end;
    /
      

  4.   

    create or replace procedure SP_Test
    as
    v_sql varchar2(400);
    v_tablename varchar2(30);
    l_cnt number;
    begin
        v_tablename := 'au_zone';
       v_sql := 'select count(1) from '||v_tablename;  execute immediate v_sql into l_cnt;  dbms_output.put_line(l_cnt);
    end;
    还是报错.
      

  5.   

    create or replace procedure SP_Test_1
    as
     v_tab varchar2(30);
      l_cnt number;
    begin
      v_tab := 'au_zone';
      execute immediate 'select count(1) from '|| v_tab into l_cnt;  -- 使用into ,pl/sql里不能使用select * 返回结果集的.
      dbms_output.put_line(l_cnt); 
    end;
    编译成功,怎么执行出错呢?
      

  6.   

    calll sp_test_1;报错:不是一个有效的函数或存储过程.
      

  7.   

    SQL> set serveroutput on
    SQL> create or replace procedure SP_Test
      2  as
      3  --v_sql varchar2(400);
      4  v_tablename varchar2(30);
      5  l_cnt number;
      6  begin
      7      v_tablename := 'au_zone';
      8      execute immediate 'select count(1) from '||v_tablename into l_cnt;
      9      dbms_output.put_line(l_cnt);
     10  end;
     11  /Procedure createdSQL> execute SP_Test;0PL/SQL procedure successfully completedSQL> 
      

  8.   

    楼主当中有什么字符敲错了吗? 细致点应该没问题的, 是对的
    SQL> create or replace procedure SP_Test
      2  is
      3    v_sql varchar2(400);
      4    v_tablename varchar2(30);
      5    l_cnt number(10);
      6  begin
      7      v_tablename := 'au_zone';
      8      v_sql := 'select count(1) into l_cnt from '||v_tablename;
      9      execute immediate v_sql;
     10      dbms_output.put_line(l_cnt);
     11  end SP_Test;
     12  /
     
    Procedure created
     
    SQL>