ITPUB??ì3
12月微软Hyper-V虚拟化沙龙主题征集
ITPUB论坛 » Oracle开发 » 嵌套表

标题: 嵌套表
离线 wujin
初级会员



精华贴数 0
个人空间 0
技术积分 80 (19716)
社区积分 0 (49141)
注册日期 2001-11-13
论坛徽章:0
      
      

发表于 2002-1-17 15:09 
嵌套表

create or replace procedure test1(

type t_wordstab is table of varchar2(50);

v_tab1 t_wordstab;
v_tab2 t_wordstab :=t_wordstab()) ; is
begin
if v_tab1 is null then
dbms_output.put_line('v_tab1 is null');
else
dbms_output.put_line('v_tab1 is not null');
end if ;

if v_tab2 is null then
dbms_output.put_line('v_tab2 is null');
else
dbms_output.put_line('v_tab2 is not null');
end if ;
end;
end test1;

怎样创建嵌套表,麻烦把代码写下好。


只看该作者    顶部
离线 Arrayljfling
初级会员



精华贴数 0
个人空间 0
技术积分 98 (17027)
社区积分 0 (51061)
注册日期 2002-1-8
论坛徽章:0
      
      

发表于 2002-1-17 17:30 
代碼太長,所以有刪,但定義和引用是這樣,你還是可以看看的。
create or replace package as
--定義結構
   TYPE MONTYPE IS RECORD(
        PNL             M_SMONTOFW.PNL%TYPE,
        EVENT_NO        M_DAYTOFW.EVENT_NO%TYPE,
        B001            M_DAYTOFW.B001%TYPE,
        B002            M_DAYTOFW.B002%TYPE,
        B003            M_DAYTOFW.B003%TYPE,
        B004            M_DAYTOFW.B004%TYPE,
        B005            M_DAYTOFW.B005%TYPE,
        UPDATE_NUMBER   M_DAYTOFW.UPDATE_NUMBER%TYPE,
        B011            M_DAYTOFW.B001%TYPE,
        B012            M_DAYTOFW.B001%TYPE,
        B013            M_DAYTOFW.B001%TYPE,
        B014            M_DAYTOFW.B001%TYPE,
        B015            M_DAYTOFW.B001%TYPE,
        B016            M_DAYTOFW.B001%TYPE,
        B017            M_DAYTOFW.B001%TYPE);

   TYPE VDAYTOFW  IS TABLE OF MONTYPE INDEX BY BINARY_INTEGER;
    TYPE DUTY IS TABLE OF M_DUTY%ROWTYPE INDEX BY BINARY_INTEGER;
END;


CREATE OR REPLACE PROCEDURE MONTOFW
(VFACT_NO VARCHAR2,VYYMM VARCHAR2,VUSERNAME VARCHAR2,OUT_MSG OUT VARCHAR2)
IS
VUPRIGHT_TM NUMBER(3,1);
CURSOR C_1 IS
        SELECT PNL,NAME_CH,NAME_EN,SLSORT_NO,SEC_NO,INFACT_DAY,INMOVE_DAY,DUTY_NO
        FROM   M_PERSONNEL
        WHERE  FACT_NO = VFACT_NO;
VUPDATE_NUMBER M_DAYTOFW.UPDATE_NUMBER%TYPE;
VCOMMIT INTEGER:=0;
VMON    MON.VDAYTOFW;
VHOLD   MON.VHOLDTOFW;
VCAREVTOPR MON.CAREVTOPR;
VDUTY   MON.DUTY;
VSMONTOFW  MON.SMONTOFW;
VSMONTOFW1 MON.SMONTOFW;
VEVENT_NO  M_CAREVTOPR.EVENT_NO%TYPE;
QTY        M_SMONTOFW.TIMES_NUMBER%TYPE;
VCHAR      VARCHAR2(150);
VTURN      INTEGER:=0;
VUPDATE_DELAY M_FACTORY.UPDATE_DELAY%TYPE;
VDELAY_LEAVE M_FACTORY.DELAY_LEAVE_%TYPE;
BEGIN
DELETE FROM M_SMONTOFW WHERE INFM_YM = VYYMM AND PNL IN (SELECT PNL  FROM M_MONTOFW WHERE INFM_YM = VYYMM AND FACT_NO = VFACT_NO AND LEAVE_MK = 'N');
DELETE FROM M_MONTOFW WHERE INFM_YM = VYYMM AND FACT_NO = VFACT_NO AND LEAVE_MK = 'N';
COMMIT;
---SELECT MAX(NVL(UPRIGHT_TM,8)) INTO VUPRIGHT_TM FROM M_WAYCARD;
---取得廠別檔所設的修改次數計遲到,遲到次數算曠工
   SELECT MAX(UPDATE_DELAY),MAX(DELAY_LEAVE_) INTO VUPDATE_DELAY,VDELAY_LEAVE FROM M_FACTORY WHERE  FACT_NO = VFACT_NO;

---取得所有人員的1.0倍工時﹐2.0倍工時,3.0倍工時
FOR C2 IN C_2 LOOP
     VC2 := VC2 + 1;
     VMON(VC2).PNL := C2.PNL;
     VMON(VC2).EVENT_NO := C2.EVENT_NO;
     VMON(VC2).B001 := C2.B001;
     VMON(VC2).B002 := C2.B002;
     VMON(VC2).B003 := C2.B003;
     VMON(VC2).B004 := C2.B004;
     VMON(VC2).UPDATE_NUMBER := C2.UPDATE_NUMBER;
     VMON(VC2).B011 := C2.B011;
     VMON(VC2).B012 := C2.B012;
     VMON(VC2).B013 := C2.B013;
     VMON(VC2).B014 := C2.B014;
     VMON(VC2).B015 := C2.B015;
     VMON(VC2).B016 := C2.B016;
     VMON(VC2).B017 := C2.B017;
END LOOP;

OPEN C_1;
LOOP
      FETCH C_1 INTO C1;
      EXIT WHEN C_1%NOTFOUND;
           VCOMMIT := VCOMMIT + 1;
           VSMONTOFW := VSMONTOFW1;  ---清空所放個人所有項目的索引表
           IF C1.INFACT_DAY <= VYYMM||'31' OR C1.INMOVE_DAY <= VYYMM||'31' THEN ---此人員本月要算工時
              ---INSERT主檔
              INSERT INTO  M_MONTOFW(INFM_YM,PNL,NAME_CH,NAME_EN,SLSORT_NO,SEC_NO,UPDATE_NM,UPDATE_TM,COUNT_TM,LEAVE_MK,FACT_NO)
                           VALUES(VYYMM,C1.PNL,C1.NAME_CH,C1.NAME_EN,C1.SLSORT_NO,C1.SEC_NO,VUSERNAME,TO_CHAR(SYSDATE,'YYYYMMDD'),TO_CHAR(SYSDATE,'YYYYMMDD'),'N',VFACT_NO);
              FOR N IN 1..VC2 LOOP
                        VSMONTOFW(SUBSTR(VMON(N).EVENT_NO,2,3)).EVENT_NO := VMON(N).EVENT_NO;
                        VSMONTOFW(SUBSTR(VMON(N).EVENT_NO,2,3)).TIMES_NUMBER := NVL(VMON(N).B005,0);      
                  END IF;
              END LOOP;
              
END LOOP;
CLOSE C_1;
COMMIT;   
END;


只看该作者    顶部
 
    

相关内容


CopyRight 1999-2006 itpub.net All Right Reserved.
北京皓辰广域网络信息技术有限公司. 版权所有
E-mail:Webmaster@itpub.net
京ICP证:010037号 联系我们 法律顾问