如何将光标值提取到对象中

时间:2015-07-31 09:16:07

标签: oracle plsql user-defined-types object-type

我想从游标中获取值并将它们存储在对象中.... 我试着用Record得到输出

.horizontal
{
   width: 100%; /* or your widht pereference */
   overflow-x: scroll;
}

 /* float cleaner for inside elements */
.horizontal:before{ clear: both; content: " " }
.horizontal:after{ clear: both; content: " " }

.horizontal .elements.in
{
   float: left; /* horizontally to knee */
   width: 500px; /* or your inside elements width pereference */
}

但是当我尝试在一个对象中做同样的事情时它不起作用...我浏览了所有的网站,但没有得到正确的示例程序。这是我的目标:

DECLARE
CURSOR lc_emp_fetch 
IS 
  SELECT emp_no,emp_name FROM maniemp;
  TYPE r_emp_record IS RECORD (
                               eno maniemp.emp_no%TYPE,
                               ename maniemp.emp_name%TYPE
                              );
TYPE t_emp IS TABLE OF r_emp_record;
lt_emp_rcd t_emp;                            
BEGIN
  OPEN lc_emp_fetch;
  LOOP
  FETCH lc_emp_fetch BULK COLLECT INTO lt_emp_rcd LIMIT 5;
  EXIT WHEN lt_emp_rcd.COUNT=0;
    FOR indx IN 1..lt_emp_rcd.COUNT
    LOOP
      DBMS_OUTPUT.PUT_LINE(lt_emp_rcd(indx).eno||lt_emp_rcd(indx).ename);
    END LOOP;
END LOOP;
CLOSE lc_emp_fetch;
END;
/                           

我是新手,我不知道如何做到这一点可以有人帮我这个

1 个答案:

答案 0 :(得分:3)

如果你想用一个对象和类型来尝试上面的例子,那么你应该创建两个都在模式级别的意思

 CREATE OR REPLACE type R_EMP_OBJECT as object(
                                   eno number,
                                   ename varchar2(30)
                                  );

 `create or replace type t_emp IS TABLE OF r_emp_object`;

然后

DECLARE    
        lt_emp_rcd t_emp;                            
        BEGIN
          select r_emp_object (emp,ename) bulk collect into lt_emp_rcd 
     FROM emp;
            FOR indx IN 1..lt_emp_rcd.COUNT
            LOOP
              DBMS_OUTPUT.PUT_LINE(lt_emp_rcd(indx).eno||lt_emp_rcd(indx).ename);
            END LOOP;  
        END;

编辑我尝试使用游标,下面的代码工作正常

 DECLARE 
 CURSOR C1
 IS   
  SELECT emp_no,emp_name FROM maniemp;
 C2 C1%ROWTYPE;
 LT_EMP_RCD T_EMP;                            
 BEGIN
 OPEN C1;
 LOOP
 FETCH  C1 INTO C2 ;
 SELECT R_EMP_OBJECT(C2.EMP_NO,C2.EMP_NAME) BULK COLLECT INTO LT_EMP_RCD FROM DUAL;
 EXIT WHEN C1%NOTFOUND;
 FOR INDX IN 1..LT_EMP_RCD.COUNT
 LOOP
 DBMS_OUTPUT.PUT_LINE(LT_EMP_RCD(INDX).ENO||' '||LT_EMP_RCD(INDX).ENAME);
 END LOOP;
 END LOOP; 
 CLOSE C1; 
 END;