从PLSQL函数中获取一组值

时间:2015-01-07 16:43:20

标签: oracle stored-procedures plsql

我编写了一个函数来选择队列中的一些通量并用更新的标志锁定它们。 我用光标做了它,效果很好。但是我需要获取我锁定的通道的ID以在我的应用程序中处理它们。

所以我开始编写一个函数:

CREATE OR REPLACE Function getIDArray
  RETURN VARCHAR2 is
  arr varchar2(1000);

          CURSOR flux_to_process                                                          
          IS                                                                              
           SELECT  FLUX_ID, LOCKED_FLAG
           FROM (
               SELECT FLUX_ID, FLUX, GROUP_STORE_ID, STORE_ID, REFID, FLUX_TYPE, LOCKED_FLAG
                 FROM DEV_ISB_TRANSACTIONS.BUFFER_FLUX                                      
                 WHERE status = 0                                                           
                 AND LOCKED_FLAG = 0                                                                                                             
                 ORDER BY DATE_CREATION ASC)
            WHERE ROWNUM <= 8;

          BEGIN                                                                           

          FOR flux_rec IN flux_to_process                                                 
              LOOP                                                                        
              IF flux_rec.LOCKED_FLAG = 0
                THEN      

                UPDATE DEV_ISB_TRANSACTIONS.BUFFER_FLUX                                    
                SET LOCKED_FLAG = 1                                                         
                WHERE FLUX_ID = flux_rec.FLUX_ID; 
                arr := flux_rec.FLUX_ID;

              else exit;
          COMMIT;                                                                         
          END IF;
          END LOOP; 
          RETURN arr;
         END;

函数编译返回OK但我没有返回我的值。

你们有任何关于如何做到这一点的线索吗?

1 个答案:

答案 0 :(得分:1)

关于你的问题本身,我可以看到函数返回的唯一两个原因&#34;没有价值&#34;将是:

  • SELECT部分返回集,
  • 您有一条FLUX_IDNULL的记录。

对于不可能的,可能是后面的选项给定列的名称,它将与您在每次迭代时覆盖结果的事实相当一致 - 以及ORDER BY命令NULL之后不是 - 默认为NULL