--自定义对象

CREATE OR REPLACE TYPE Fas_checksheetinfo_line_obj AS OBJECT
(
  CSID_ID           VARCHAR2(32),--报账单明细ID
  CSI_ID            VARCHAR2(32),--报账单ID
  CSID_GENERATEDATE DATE,        --费用发生日期
  CSID_TYPE         VARCHAR2(32),--费用类型
  CSID_SUMMARY      VARCHAR2(256),--费用摘要
  CSID_CURRENCY     VARCHAR2(32),--币种
  CSID_VALUE        NUMBER,      --费用发生金额
  CREATEDBY         VARCHAR2(32),--生成人
  CREATEDDATE       DATE,        --生成日期
  LASTUPDATEDBY     VARCHAR2(32),--最后更改人
  LASTUPDATEDDATE   DATE,        --最后更改日期
  FLAG              VARCHAR2(32),--删除标识
  CSID_SEQ          NUMBER       --序号
)


自定义 table object

CREATE OR REPLACE TYPE Fas_checksheetinfo_line_tab AS TABLE OF Fas_checksheetinfo_line_obj;


pck

PROCEDURE checksheet_import(P_CSI_ID                  IN VARCHAR2, --报账单ID
                              P_CSI_CODE                IN VARCHAR2, --报账单编号
                              P_RI_ID                   IN VARCHAR2, --凭证ID
                              P_CSI_VALUE               IN NUMBER, --报账单金额
                              P_CSI_ORG                 IN VARCHAR2, --报账单位
                              P_CREATEDBY               IN VARCHAR2, --生成人
                              P_CREATEDDATE             IN DATE,     --生成日期
                              P_LASTUPDATEDBY           IN VARCHAR2, --最后更改人
                              P_LASTUPDATEDDATE         IN DATE,     --最后更改日期
                              P_FLAG2                   IN VARCHAR2, --删除标识
                              P_CSI_TYPE                IN VARCHAR2, --报账单类型
                              P_CSI_DEST                IN VARCHAR2, --目的地
                              P_CSI_GENERATEDATE        IN DATE,     --费用发生年月
                              P_CSI_COSTCENTER          IN VARCHAR2, --成本中心
                              P_CSI_SUMMARY             IN VARCHAR2, --摘要
                              P_CSI_PDFDIR              IN VARCHAR2, --pdf地址
                              P_GI_PDFDIR               IN VARCHAR2, --影像列表pdf地址
                              p_checksheetinfo_line_tab IN Fas_checksheetinfo_line_tab, --行信息,嵌套表
                              ----------------输出结果---------------------------
                              p_flag OUT NUMBER,
                              p_msg  OUT VARCHAR2) is
 
    v_cheksheet      ei_checksheetinfo%ROWTYPE;
    v_cheksheet_line ei_checksheetinfo_detail%ROWTYPE;
    v_line_count     number;
  begin
    null;
    p_flag := 0;
    p_msg := 'success';
    --插入报账单头信息表
    insert into ei_checksheetinfo
      (CSI_ID,
       CSI_CODE,
       RI_ID,
       CSI_VALUE,
       CSI_ORG,
       CREATEDBY,
       CREATEDDATE,
       LASTUPDATEDBY,
       LASTUPDATEDDATE,
       FLAG,
       CSI_TYPE,
       CSI_DEST,
       CSI_GENERATEDATE,
       CSI_COSTCENTER,
       CSI_SUMMARY,
       CSI_PDFDIR,
       GI_PDFDIR)
    values
      (P_CSI_ID,
       P_CSI_CODE,
       P_RI_ID,
       P_CSI_VALUE,
       P_CSI_ORG,
       P_CREATEDBY,
       P_CREATEDDATE,
       P_LASTUPDATEDBY,
       P_LASTUPDATEDDATE,
       P_FLAG,
       P_CSI_TYPE,
       P_CSI_DEST,
       P_CSI_GENERATEDATE,
       P_CSI_COSTCENTER,
       P_CSI_SUMMARY,
       P_CSI_PDFDIR,
       P_GI_PDFDIR);
    --插入行信息数据
    v_line_count := p_checksheetinfo_line_tab.COUNT;
    FOR i IN 1 .. v_line_count LOOP
      --p_line_errmsg(i).line_number := v_invoice_line_info_arr(i).line_number;
      insert into EI_CHECKSHEETINFO_DETAIL
        (CSID_ID,
         CSI_ID,
         CSID_GENERATEDATE,
         CSID_TYPE,
         CSID_SUMMARY,
         CSID_CURRENCY,
         CSID_VALUE,
         CREATEDBY,
         CREATEDDATE,
         LASTUPDATEDBY,
         LASTUPDATEDDATE,
         FLAG,
         CSID_SEQ)
      values
        (p_checksheetinfo_line_tab(i).CSID_ID,
         p_checksheetinfo_line_tab(i).CSI_ID,
         p_checksheetinfo_line_tab(i).CSID_GENERATEDATE,
         p_checksheetinfo_line_tab(i).CSID_TYPE,
         p_checksheetinfo_line_tab(i).CSID_SUMMARY,
         p_checksheetinfo_line_tab(i).CSID_CURRENCY,
         p_checksheetinfo_line_tab(i).CSID_VALUE,
         p_checksheetinfo_line_tab(i).CREATEDBY,
         p_checksheetinfo_line_tab(i).CREATEDDATE,
         p_checksheetinfo_line_tab(i).LASTUPDATEDBY,
         p_checksheetinfo_line_tab(i).LASTUPDATEDDATE,
         p_checksheetinfo_line_tab(i).FLAG,
         p_checksheetinfo_line_tab(i).CSID_SEQ);
    END LOOP;
    commit;
  EXCEPTION
    WHEN OTHERS THEN
      p_flag := 101;
      p_msg  := SQLERRM;
  end checksheet_import;


测试脚本

declare
  checksheetinfo_line_tab Fas_checksheetinfo_line_tab;
  p_flag                  number;
  p_msg                   varchar2(200);
begin
  --插入主表

--插入行表
  checksheetinfo_line_tab := Fas_checksheetinfo_line_tab();
  checksheetinfo_line_tab.extend;
  checksheetinfo_line_tab(1) := Fas_checksheetinfo_line_obj(CSID_ID           => 11,
                                                            CSI_ID            => 1,
                                                            CSID_GENERATEDATE => sysdate,
                                                            CSID_TYPE         => 11,
                                                            CSID_SUMMARY      => 11,
                                                            CSID_CURRENCY     => 11,
                                                            CSID_VALUE        => 11,
                                                            CREATEDBY         => 11,
                                                            CREATEDDATE       => sysdate,
                                                            LASTUPDATEDBY     => 11,
                                                            LASTUPDATEDDATE   => sysdate,
                                                            FLAG              => 11,
                                                            CSID_SEQ          => 11);
   --调用过程                                                       
  fas_checksheet_pkg.checksheet_import(1,
                                       1,
                                       1,
                                       1,
                                       1,
                                       1,
                                       sysdate,
                                       1,
                                       sysdate,
                                       1,
                                       1,
                                       1,
                                       sysdate,
                                       1,
                                       1,
                                       1,
                                       1,
                                       checksheetinfo_line_tab,
                                       p_flag,
                                       p_msg);
   --打印调用结果
   dbms_output.put_line('p_flag:' || p_flag || ',p_msg:' || p_msg);
end;

oracle 嵌套表的更多相关文章

  1. Oracle嵌套表

    一.介绍  1.定义 嵌套表是表中之表.一个嵌套表是某些行的集合,它在主表中表示为其中的一列.对主表中的每一条记录,嵌套表可以包含多个行.在某种意义上,它是在一个表中存储一对多关系的一种方法.    ...

  2. (转)oracle嵌套表示例

    本文转载自:http://www.cnblogs.com/gisdream/archive/2012/04/13/2445291.html ----嵌套表:就是把一个表中的字段定义为一个表,这个字段表 ...

  3. oracle ibatis 存储过程 返回游标 嵌套表

    自己解决问题了 问题总结: 1.index by表不能存储在数据库中的type中,故选择嵌套表. 2.ibatis不支持oracle的复合数据类型的返回.(个人理解) 3.替代方案:用返回oracle ...

  4. oracle:变长数组varray,嵌套表,集合

    创建变长数组类型 ) );  这个变长数组最多可以容纳两个数据,数据的类型为 varchar2(50) 更改元素类型的大小或精度 可以更改变长数组类型和嵌套表类型 元素的大小. ALTER TYPE ...

  5. oracle 之 数组、嵌套表、SQL查询式 实现多表数据for循环插入指定表

    1.基础环境 创建基础表: CREATE TABLE TEST_TAB1( ID INT, NAME VARCHAR2(20) ); CREATE TABLE TEST_TAB2( ID INT, N ...

  6. PL/SQL 嵌套表变长数组和索引表[转]

    关于PL/SQL中这三种数组的介绍,不想写了.转一篇日志吧…… 链接:http://www.blogjava.net/decode360/archive/2008/08/08/280825.html ...

  7. Oracle的表连接方式

    Oracle的表连接方式: 1.Nl Join连接(嵌套连接) 2.Hash Join(哈希连接) 3.Merge Sort Join(排序合并连接) 各种连接的使用场景: 1. 排序合并连接是偏向于 ...

  8. Oracle多表的简单查询

    Oracle多表的简单查询 .多表查询 多表查询是指基于两个和两个以上的表或是视图的查询. 问题:显示雇员名,雇员工资及所在部门的名字[笛卡尔集]? select t.ename,t.sal,t1.d ...

  9. 嵌套表用法详解(PLSQL)

    嵌套表 嵌套表是一种类似于索引表的结构,也可以用于保存多个数据,而且也可以保存复合类型的数据 嵌套表指的是一个数据表定义事同时加入了其他内部表的定义,这一概念是在oracle 8中引入的,它们可以使用 ...

随机推荐

  1. JS一个根据时区输出时区时间的函数

    做项目遇到的坑爹问题,需要根据时区获取时区中轴线的时间.为此搜了好久网上都没什么JS的代码描述到这一方面,最后自己翻了下高中地理才写了个函数出来. 此图可以看出来,全球分为了0时区,东西1-11区,第 ...

  2. Android 编程下判断当前设备是手机还是平板

    /** * 判断当前设备是手机还是平板,代码来自 Google I/O App for Android * @param context * @return 平板返回 True,手机返回 False ...

  3. 2016.7.9 计算机网络复习要点第四章之虚拟专用网VPN和网络地址转换NAT

    1.虚拟专用网VPN (1)一个机构内,对于那些仅在本机构内部使用的计算机就可以由本季候自行分配其IP地址,让这些计算机使用仅在本机构有效的IP地址(本地地址),不需要申请全球唯一的IP地址(全球地址 ...

  4. http://my.oschina.net/chinacion/blog/647641

    http://my.oschina.net/chinacion/blog/647641

  5. 2015ACM/ICPC亚洲区长春站 B hdu 5528 Count a * b

    Count a * b Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...

  6. BZOJ3838 : [Pa2013]Raper

    将选取的$A$看成左括号,$B$看成右括号,那么答案是一个合法的括号序列. 那么只要重复取出$k$对价值最小的左右括号,保证每时每刻都是一个合法的括号序列即可. 将$($看成$1$,$)$看成$-1$ ...

  7. BZOJ4373 : 算术天才⑨与等差数列

    设$pre[i]$表示第$i$个数上一次出现的位置,$d[i]=abs(a[i]-a[i+1])$. 用线段树维护区间内$a$的最小值.最大值,$pre$的最大值以及$d$的$\gcd$. 对于询问$ ...

  8. BZOJ3809: Gty的二逼妹子序列

    Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题.   对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数.   为了方 ...

  9. COJ262 HDNOIP201206施工方案

    HDNOIP201206施工方案 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 c国边防军在边境某处的阵地是由n个地堡组成的. ...

  10. elasticsearch1.0 升级2.2的数据备份和恢复

    近期由于elasticsearch的版本升级,需要研究下elasticsearch的快照(snapshot)和恢复(restore)功能.   先说下背景,目前环境采用的是elasticsearch1 ...