create or replace procedure TriggersProcedure(TableInput varchar2, WELL_ID varchar2,SqlStr varchar2,SqlPro varchar2) is
  str varchar2(800);
  str1 varchar2(800);
  BaoJing_TIME   DATE;              ---报警时间
  Info VARCHAR2(40);                ---报警信息
  TemKey    NUMBER(1);              ---产生告警
  ATTR_NAMEZHI int;                 ---得到现在OIL_WELL_DATA_INPUT的值
  CURSOR cur_emp IS   
   SELECT TABLE_NAME,ATTR_NAME,DOWN_LIMIT,DOWN_LIMIT2,DOWN_LIMIT3,UP_LIMIT,UP_LIMIT2,UP_LIMIT3 FROM ALARM_LJZ_MANAGE Where TABLE_NAME=TableInput and WELL_ID=WELL_ID ;--'27';
begin
  --str1:='SELECT TABLE_NAME,ATTR_NAME,DOWN_LIMIT,DOWN_LIMIT2,DOWN_LIMIT3,UP_LIMIT,UP_LIMIT2,UP_LIMIT3 FROM ALARM_LJZ_MANAGE Where TABLE_NAME='''||TableInput||''' and WELL_ID='||WELL_ID;
  --FOR v_emp IN cur_emp LOOP
  FOR v_emp IN (SELECT TABLE_NAME,ATTR_NAME,DOWN_LIMIT,DOWN_LIMIT2,DOWN_LIMIT3,UP_LIMIT,UP_LIMIT2,UP_LIMIT3 FROM ALARM_LJZ_MANAGE Where TABLE_NAME=TableInput and WELL_ID=WELL_ID) LOOP  
    str:='insert into b values ('''||v_emp.ATTR_NAME||''')';
    execute   immediate   str;
  end loop;
  commit; 
  execute   immediate 'drop   table TableTemp';
end TriggersProcedure;上面的过程where条件不起作用.

解决方案 »

  1.   

    1.首先要确定表ALARM_LJZ_MANAGE是否有TableInput记录,如果没有的话,where条件肯定没有作用的
    2.另外,str:='insert into b values (''' ¦ ¦v_emp.ATTR_NAME ¦ ¦''')'这句话有问题,自己检查去
      

  2.   

    and WELL_ID=WELL_ID这种写法挺糟糕的。建议写成 and WELL_ID=v_WELL_ID 风格,即,变量和字段命名上区分开来。@_@
      

  3.   

    1.表ALARM_LJZ_MANAGE是有TableInput记录,
    2.这句是测试用的,可以不用,str:='insert into b values (''' ¦ ¦v_emp.ATTR_NAME ¦ ¦''')'