如何将过程中的用户定义记录传递回pl / sql中的调用程序?

时间:2015-05-08 19:38:43

标签: oracle stored-procedures plsql

下面的包将在表中插入10条记录,然后我需要将这些记录传递回调用程序并显示它们。我尝试过不同的东西,我能想到的和互联网上的许多搜索,都没有成功地找到我想要做的事情。

包装规格:

<ComboBox IsEditable="true">
 <ComboBoxItem Content="aaaaa"/>
 <ComboBoxItem Content="bbbbb"/>
 <Separator IsEnabled="false" TextSearch.Text="&#xA9;"/>
 <ComboBoxItem Content="ccccc" IsEnabled="false"/>
</ComboBox>

PACKAGE BODY:

CREATE OR REPLACE PACKAGE Hospital AS 

  TYPE TrtRecTyp IS RECORD (
      Pat_Nbr Treatment.Pat_Nbr%TYPE, 
      Trt_Procedure Treatment.Trt_Procedure%TYPE,
      Phys_ID Physician.Phys_ID%TYPE,
      Phys_Name Physician.Phys_Name%TYPE,
      Phys_Specialty Physician.Phys_Specialty%TYPE);          

 PROCEDURE BuildPatTbl                                                 
  (p_trt_rec OUT TrtRecTyp,
   p_num_rows IN OUT NUMBER);

致电计划:

PROCEDURE BuildPatTbl                                                 
  (p_trt_rec OUT TrtRecTyp,
   p_num_rows IN OUT NUMBER) AS   

    CURSOR pat_cur  IS    
    SELECT trt.Pat_Nbr, Trt_Procedure, trt.Phys_ID, Phys_Name, Phys_Specialty   
    FROM Treatment trt, Physician phys 
    WHERE trt.Phys_ID = phys.Phys_ID;    

    lv_rec_cnt_num NUMBER(2);

BEGIN
      lv_rec_cnt_num := p_num_rows;
      FOR lv_trt_rec IN pat_cur  LOOP  
         INSERT INTO t_patTrt (T_patTrt_ID, Pat_Nbr, Trt_Procedure, 
                 Phys_ID, Phys_Name,  Phys_Specialty)  
         VALUES(T_patTrt_ID_seq.NEXTVAL, lv_trt_rec.Pat_Nbr,
                 lv_trt_rec.Trt_Procedure, lv_trt_rec.Phys_ID, 
                 lv_trt_rec.Phys_Name, lv_trt_rec.Phys_Specialty);

           lv_rec_cnt_num := lv_rec_cnt_num + 1 ;         

      END LOOP;     

      p_num_rows := lv_rec_cnt_num;

END BuildPatTbl;

1 个答案:

答案 0 :(得分:0)

你得到什么错误?

您似乎并未在启动器的p_trt_rec变量中选择任何数据,因此您无法在程序中返回任何内容。

您应该将每一行保存到一个集合中(您当前没有这样做)并将整个集合从BuildPatTbl传回,然后遍历它。

您需要另一个变量和类型声明。它会像 -

TYPE my_tbl IS TABLE OF TrtRecTyp; my_list my_tbl;

然后将每条记录存储在my_list中并返回。

查看this page以获取更多指导。