十、oracle存储过程中的数据结构

create or replace package TEST_DATATYPE is

  TYPE MYRECORD IS RECORD(
    V_ID        A_LOG.ID%TYPE,
    V_PROC_NAME A_LOG.PROCE_NAME%TYPE,
    V_LOG_LEVEL A_LOG.LOG_LEVEL%TYPE,
    V_LOG_INFO  A_LOG.LOG_INFO%TYPE);

  PROCEDURE DATATYPE;

  FUNCTION TEST_RETURN_RECORD RETURN MYRECORD;

end TEST_DATATYPE;
create or replace package body TEST_DATATYPE is

  PROCEDURE DATATYPE IS
    --1、表的列
    /* 我真是个傻逼,为什么在临分处理的时候要定义那么多变量,
    直接用这种数据类型不就完了吗*/
    TABLEROW_A_LOG A_LOG%ROWTYPE;
    --2、记录类型record
    /* 记录类型跟上面的rowtype有很大的区别吗,感觉在用法上可以替代;
    函数的返回值可以是record类型的
    */
    RECORD1 MYRECORD;
    --3、数组类型array 和 varray(varray与array在以下用法上完全相同)
    /* 3.1、声明和初始化可以分开
       3.2、初始化的长度就是实际长度,该长度不能超过定义时的长度
       3.3、在初始化的基础上进行长度扩充时,必须先用extend
       3.4、扩充之后的长度不得超过定义时的长度
       3.5、扩充之后的值默认为空
    */
    TYPE MYARR IS ARRAY(7) OF VARCHAR2(10); --定义
    ARR1 MYARR; --声明
    ARR2 MYARR := MYARR('A', 'B', 'C');
    ---4、table  分为加INDEX BY BINARY_INTEGER和不加INDEX BY BINARY_INTEGER两种
    /* 4.1、声明和初始化
            没加:声明和初始化可以分开
            加:  只能进行声明,不能初始化,赋值只能按下标一个一个赋值
       4.2、扩充
            没加:扩充必须要先用extend
            加:直接按下标赋值即可
       注:团险拆分责任的时候应该用加了index的table来存储找到的责任
    */
    TYPE MYTABLE IS TABLE OF VARCHAR2(10);
    TABLE1 MYTABLE := MYTABLE('1', '2');
    TABLE2 MYTABLE;
    TYPE MYTABLE2 IS TABLE OF VARCHAR2(10) INDEX BY BINARY_INTEGER;
    TABLE4 MYTABLE2;
    --5、table  加index by varchar2(32)
    /* 4.1、只能进行声明,不能初始化
       4.2、有自己特殊的赋值方式
       4.3、key值唯一
       4.4、有自己特殊的遍历方式
    */
    TYPE MYTABLE_VAR IS TABLE OF VARCHAR2(32) INDEX BY VARCHAR2(10);
    TABLE5 MYTABLE_VAR;
    V_KEY VARCHAR2(10);
  BEGIN
    --2、记录类型测试
    RECORD1 := TEST_RETURN_RECORD;
    DBMS_OUTPUT.PUT_LINE(RECORD1.V_ID);
    --3、数据array测试
    DBMS_OUTPUT.PUT_LINE('数组测试');
    ARR1 := MYARR('1', '2'); --初始化
    ARR1.EXTEND; --长度扩充
    ARR1(3) := '5';
    ARR1.EXTEND;
    DBMS_OUTPUT.PUT_LINE('数组定长:' || ARR1.LIMIT);
    DBMS_OUTPUT.PUT_LINE('数组实际长度:' || ARR1.COUNT);
    DBMS_OUTPUT.PUT_LINE('数组首位元素下标:' || ARR1.FIRST);
    DBMS_OUTPUT.PUT_LINE('数组末位元素下标:' || ARR1.LAST);
    FOR I IN 1 .. ARR1.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(ARR1(I));
    END LOOP;
    FOR I IN 1 .. ARR2.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(ARR2(I));
    END LOOP;
    --4、table测试
    DBMS_OUTPUT.PUT_LINE('table测试');
    DBMS_OUTPUT.PUT_LINE('table定长:' || TABLE1.LIMIT);
    DBMS_OUTPUT.PUT_LINE('table实际长度:' || TABLE1.COUNT);
    DBMS_OUTPUT.PUT_LINE('table首位元素下标:' || TABLE1.FIRST);
    DBMS_OUTPUT.PUT_LINE('table末位元素下标:' || TABLE1.LAST);
    --4、1、初始化
    TABLE2 := MYTABLE('A', 'B', 'C', 'D');
    --4.2、增加值
    TABLE1.EXTEND(2);
    TABLE1(4) := '4';
    FOR I IN 1 .. TABLE1.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(TABLE1(I));
    END LOOP;
    FOR I IN 1 .. TABLE2.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(TABLE2(I));
    END LOOP;
    TABLE4(1) := 'a';
    TABLE4(2) := 'b';
    FOR I IN 1 .. TABLE4.COUNT LOOP
      DBMS_OUTPUT.PUT_LINE(TABLE4(I));
    END LOOP;
    --5、table测试
    TABLE5('KEY1') := 'KEY1';
    TABLE5('KEY1') := 'KEY11';
    TABLE5('KEY3') := 'KEY13';
    V_KEY := TABLE5.FIRST;
    LOOP
      DBMS_OUTPUT.PUT_LINE(V_KEY || '--->' || TABLE5(V_KEY));
      V_KEY := TABLE5.NEXT(V_KEY);
      EXIT WHEN V_KEY IS NULL;
    END LOOP;
  END DATATYPE;

  FUNCTION TEST_RETURN_RECORD RETURN MYRECORD IS
    RECORD1 MYRECORD;
  BEGIN
    SELECT A.ID, A.PROCE_NAME, A.LOG_LEVEL, A.LOG_INFO
      INTO RECORD1
      FROM A_LOG A
     WHERE ROWNUM = 1;
    RETURN RECORD1;
  END TEST_RETURN_RECORD;
end TEST_DATATYPE;

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容