SQL> create or replace procedure test_pro(t_table varchar2) is
  2  v_sql varchar2(1000);
  3  v_name varchar2(10);
  4  begin
  5        v_sql:=' select ename into v_name from' ||t_table||' where empno = 7788 ';
  6        execute immediate v_sql;
  7        exception
  8          when others then
  9              null;
 10        dbms_output.put_line('姓名'||v_name);
 11  end ;
 12  /
 
Procedure created
 
SQL> exec test_pro('emp');
 
姓名
 
PL/SQL procedure successfully completed
 
SQL> select * from emp where empno= 7788 ;
 
EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20
 -- 

解决方案 »

  1.   

    -- 直接用SQL 语句,别用动态SQL 就OK啦!
      

  2.   

    用动态SQL的时候
    ' select ename into v_name from' ||t_table||' where empno = 7788 '
    要改成
    ' select ename from' ||t_table||' where empno = 7788  into v_name '不用动态SQL可以直接执行
    select ename into v_name from t_table where empno = 7788 ;
      

  3.   

    SQL> create or replace procedure test_pro(t_table varchar2) is
      2     v_sql varchar2(1000);
      3     v_name varchar2(10);
      4     begin
      5     v_sql:=' select ename  from ' ||t_table||' where empno = 7788 ';
      6     execute immediate v_sql into v_name;
      7     dbms_output.put_line('姓名'||v_name);
      8     exception
      9     when others then
     10     null;
     11     end ;
     12  /
     
    Procedure created
     
    SQL> set serveroutput on
    SQL> exec test_pro('emp');
     
    姓名SCOTT
     
    PL/SQL procedure successfully completed
     
    SQL> 
      

  4.   


    你的写法有问题 你用了异常 所以没报错SQL> create or replace procedure test_pro(t_table varchar2) is
      2 v_sql varchar2(1000);
      3 v_name varchar2(10);
      4 begin
      5 v_sql:=' select ename  from' ||t_table||' where empno = 7788 ';
      6 execute immediate v_sql into v_name;
      dbms_output.put_line('姓名'||v_name);
      7 exception
      8 when others then
      9 null;
     11 end ;
     12 /