一个过程带参数,传过来的参数是查询表名的一部分,我不知道变量和字符串怎么接合

解决方案 »

  1.   

    举例如下:
    declare
    v_sql varchar2(200);
    v_table_name varchar2(20) :='test';
    begin
    v_sql:='select * from '||v_table_name||'';
    execute immediate v_sql;
    dbms_output.put_line(v_sql);
    end;
      

  2.   

    declare
    v_sql varchar2(200);
    v_table_name varchar2(20) :='test';
    begin
    v_sql:='select * from '||v_table_name||'';
    execute immediate v_sql;
    dbms_output.put_line(v_sql);
    end;
      

  3.   

    SQL> select * from test_2001;        ID
    ----------
             1
             2
             3
             4SQL> create or replace procedure test
      2     (pi_tbname     IN    varchar2)
      3  IS
      4     c_tbname        CONSTANT   VARCHAR2(30) :='test_';
      5     v_tbname        VARCHAR2(30);
      6     v_sqlstr        VARCHAR2(100);
      7     v_id            test_2001.id%TYPE;
      8  begin
      9     v_tbname := c_tbname||pi_tbname;
     10     v_sqlstr :='SELECT id from '||v_tbname||' where rownum=1';
     11     EXECUTE IMMEDIATE v_sqlstr INTO v_id;
     12     dbms_output.put_line(v_id);
     13  end test;
     14  /过程已创建。SQL> set serveroutput on
    SQL> exec test('2001');
    1
      

  4.   

    v_sql := 'select * from '||v_tablename;
    execute immediate v_sql;
      

  5.   

    字符串连接用||
    动态sql执行用 execute immediate
    如果是select,直接定义一个v_sql  varchar2(1000);
    然后open 游标 for v_sql即可