解决方案 »

  1.   

    Quote: 引用 楼主 yclt84 的回复:

    Quote:
    debug一下嘛,看是不是数据导致的。
      

  2.   

    create or replace function abc return varchar2 is
      Result varchar2(100);
    begin
      dbms_output.put_line('function called.');
      return('ffffff');
    end abc;
      

  3.   

    SELECT ID,
                   ZZJGDM
              FROM T_FR_DL; 这个几条数据?
      

  4.   

    UPDATE T_FR
                   SET QYZT = abc()
                 WHERE ZZJGDM = c_row.ZZJGDM;  
    你这张表“ T_FR” 有多笔数据吧!
      

  5.   

    UPDATE T_FR
                   SET QYZT = abc()
                 WHERE ZZJGDM = c_row.ZZJGDM;   有多少笔记录就会调用多少次abc函数,
    UPDATE T_FR
                   SET QYZT = (select abc() from dual)
                 WHERE ZZJGDM = c_row.ZZJGDM;   这个Oracle机制会把函数返回值当成一个变量去存储,不会再次去查询。所以在写sql的时候要注意写法问题,类似这种写法会浪费很多空间,当数据量达到一定数量时候,你的程序就像牛车一样了,呵呵,分享下我的经验。
      

  6.   

    CREATE OR REPLACE PROCEDURE p_kkk1
    IS
        CURSOR c_dl IS
            SELECT ID,
                   ZZJGDM
              FROM T_FR_DL;
        c_row c_dl%ROWTYPE;
       intIndex NUMBER;
    BEGIN
       intIndex :=0;
        FOR c_row IN c_dl LOOP
          intIndex :=  intIndex + 1;
         dbms_output.put_line('intIndex :'+intIndex );
            BEGIN
                UPDATE T_FR
                   SET QYZT = abc()
                 WHERE ZZJGDM = c_row.ZZJGDM;
            END;
        END LOOP;
     
    END p_kkk1;-----------
    看看到底执行了几次
      

  7.   

    感谢各位的热心解答,今天到公司后,反复测试,发现set ...= function()的写法没有问题,并且set ...=(select function from dual)的写法也没有问题,没有出现函数被重复调用的现象。(注:原来我在被调用的函数中使用dbms_output函数输出,以便用于分析函数被调用几次)。
    我分析应该是数据库环境异常造成的。今天我清除缓冲区后,反复测试,原来写法确实没有问题。
    感谢各位,谢谢!!