小弟在编写一个procedure,主要是调用 为了改变表rpt_fadianliang中的dianliang 值 调用函数fun_getdlbyreading计算。
函数无错误 ,但是fun_getdlbyreading()有5个参数,最后一个参数 v_fadianliang 是指标名称,这个参数在
表 index_info.index_name中,无法直接取到,请问我在不想使用游标的情况下 如何能将 v_fadianliang传递进去。CREATE OR REPLACE PROCEDURE FCJH.p_insert_wangdiao3 (v_dt DATE)
IS
   v_fadianliang    index_info.index_name%TYPE;
   v_error          INT;
   v_gaochangbian   index_info.index_name%TYPE;
BEGIN                                --从游标中循环出machineset_id, index_name
   v_error := 0;   BEGIN
      SELECT a.index_name                       --这个参数注入是错误的,返回多行
        INTO v_fadianliang                       
        FROM index_info a, rpt_fadianliang b
       WHERE a.index_id = b.index_id AND b.create_date = v_dt;      UPDATE rpt_fadianliang                               --循环修改dianliang
         SET rpt_fadianliang.dianliang =                   --调用fun_getdlbyreading返回float的值
                fun_getdlbyreading ('RPT_FADIANLIANG',
                                   rpt_fadianliang.machineset_id,
                                    v_dt,
                                    rpt_fadianliang.reading2,
                                    v_fadianliang   ----------我该怎么传递个不在rpt_fadianliang的参数
                                   )
       WHERE create_date = v_dt;

      COMMIT;
   EXCEPTION
      WHEN OTHERS
      THEN
         v_error := v_error + 1;
         ROLLBACK;
   END;   BEGIN
      SELECT a.index_name
        INTO v_gaochangbian
        FROM index_info a, rpt_gaochangbian b
       WHERE a.index_id = b.index_id AND b.create_date = v_dt;      UPDATE rpt_gaochangbian
         --循环修改dianliang
      SET rpt_gaochangbian.dianliang =
             fun_getdlbyreading ('RPT_GAOCHANGBIAN',
                                 --调用fun_getdlbyreading返回float的值
                                 rpt_gaochangbian.machineset_id,
                                 v_dt,
                                 rpt_gaochangbian.reading2,
                                 v_gaochangbian
                                )
       WHERE create_date = v_dt;      COMMIT;
   EXCEPTION
      WHEN OTHERS
      THEN
         v_error := v_error + 1;
         ROLLBACK;
   END;
END p_insert_wangdiao3;

解决方案 »

  1.   

    如果你这个函数接收单个值,并且函数只返回一个值进行update,游标循环是必须的。除非你一次传入多个用指定分隔符连接的字符串指标值,然后在函数内分解这个字符串,
    并返回一个值。
      

  2.   

      多谢1楼帮忙,其实这个调用 我开始写了游标,已经完成了 目标,但是领导认为 我写游标不好,要我用dml一次完成批量修改,参数传递按着 rpt_fadianliang.machineset_id指定。
       我那个函数确实是返回一个float值。
       请问谁有办法能帮我把红色部分 完成。 不用游标 谢谢