create or replace procedure sbgl_tests
(
v_fid IN VARCHAR2 DEFAULT NULL,       
v_tablename IN VARCHAR2 DEFAULT NULL       
) is
  v_sql VARCHAR2(2000);
  v_ischeck number;
begin
  
 -- select nvl(sh,0) into v_ischeck from sbgl_runM where fid=6;  
  v_sql := 'select nvl(sh,0) into v_ischeck from '||v_tablename||' where fid='||v_fid;
  EXECUTE IMMEDIATE v_sql;
end sbgl_tests;此存储过程中如何把表中sh字段值赋值给v_ischeck参数,直接写SQL语句可以,但是放入参数中执行不行

解决方案 »

  1.   

    写到EXECUTE IMMEDIATE里面去:EXECUTE IMMEDIATE 'select nvl(sh,0) into v_ischeck from ' ||  v_tablename || ' where fid= ' || v_fid; 
      

  2.   

    create or replace procedure sbgl_tests 

    v_fid IN VARCHAR2 DEFAULT NULL,      
    v_tablename IN VARCHAR2 DEFAULT NULL      
    ) is 
      v_sql VARCHAR2(2000); 
      v_ischeck number; 
    begin 
      
    -- select nvl(sh,0) into v_ischeck from sbgl_runM where fid=6;  
      v_sql := 'select nvl(sh,0) into v_ischeck from '||v_tablename||' where fid='''||v_fid||'''; -->这里加
      EXECUTE IMMEDIATE v_sql; 
    end sbgl_tests;