oracle 嵌套表

--自定义对象

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;

时间: 2024-09-27 04:37:16

oracle 嵌套表的相关文章

Oracle嵌套表存储格式浅析

Oracle嵌套表很少用,下面来研究下其如何存储的.用一个例子,一个用户对应对个部门. SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Rele

嵌套表用法详解(PLSQL)

嵌套表 嵌套表是一种类似于索引表的结构,也可以用于保存多个数据,而且也可以保存复合类型的数据 嵌套表指的是一个数据表定义事同时加入了其他内部表的定义,这一概念是在oracle 8中引入的,它们可以使用SQL进行访问,也可以进行动态扩展. 创建表指定嵌套表存储空间名称 Create table 表名称( 字段名称 类型 -- 嵌套表字段名称 嵌套表类型 )NESTED TABLE 嵌套表字段名称 STORE AS 存储空间名称: 定义部门表 DROP TABLE department Create

oracle热点表online rename

对于在线的繁忙业务表的任何操作都可能带来意想不到的风险.一张业务表,对partition key进行升位,其步骤是: rename原表 新建临时表 交换分区到临时表 升位临时表的字段的长度 交换临时表到第二张临时表 rename第二种临时表为业务表 整个的操作过程如果顺利,预计在10s左右,如果放在文件中,速度会很快.下面模拟繁忙表进行测试: #!/bin/sh . /home/oracle/.bash_profile sqlplus -S /nolog<<EOF conn test/test

oracle 11G表压缩

最近一套生产库表空间一直告警在90%以上,但的磁盘硬件资源又不足,整个库已经达到26T.库里存储了近4年的数据,与业务沟通说历史数据基本上不会做操作,但是又不能归档,所以想到了压缩表来节省表空间. 随着数据库的增长,我们可以考虑使用oracle的表压缩技术.表压缩可以节省磁盘空间.减少data buffer cache的内存使用量.并可以显著的提升读取和查询的速度.当使用压缩时,在数据导入和DML操作时,将导致更多的CPU开销,然而,由于启用压缩而减少的I/O需求将抵消CPU的开销而产生的成本.

Oracle Temp 表空间切换

一.TEMP表空间作用 临时表空间主要用途是在数据库进行排序运算.管理索引.访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理.当 oracle 里需要用到 sort 的时候, PGA 中 sort_area_size 大小不够时,将会把数据放入临时表空间里进行排序,同时如果有异常情况的话,也会被放入临时表空间 , 正常来说,在完成 Select 语句.create index 等一些使用 TEMP 表空间的排序操作后, Oracle 是会自动释放掉临时段的.注意这里的释放,仅仅是

Oracle 重建表(rename)注意事项总结

一.概述 前一段时间,有一个DBA朋友在完成重建表(rename)工作后,第二天早上业务无法正常运行,出现数据无法插入的限制和错误,后来分析才发现,错误的原因是使用rename方式重建表以后,其它引用这个表的外键约束指向没有重新定义到这个重建的新表中,从而导致这些表在插入新数据时,违反数据完整性约束,导致数据无法正常插入.影响了业务大概有1个多小时,真是一次血淋淋的教训啊. 使用rename方式重建表是我们日常DBA维护工作中经常使用的一种方法,因为CTAS+rename这种配合方式,非常实用和

java 操作oracle 建表,更新记录

1.  建立表的类 import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.PreparedStatement; public class lx01{ public static void main(String[] args) throws SQLException, ClassNotFoundE

Oracle建立表空间和用户

建立表空间和用户的步骤: 用户 建立:create user username identified by "password"; 授权:grant create session to username; grant create table to username; grant create tablespace to username; grant create view to username; 表空间 建立表空间(一般建N个存数据的表空间和一个索引空间): create tab

如何利用Oracle外部表导入文本文件的数据

同事最近在忙数据一致性比对工作,需要对不同文本文件中的数据进行比对,有的文件较大,记录较多,如果用普通的文本编辑器打开的话,很显然,会很卡,甚至打不开. 基于此,可将该文本文件的数据导入到数据库中,在集合的层面进行比对. 那么如何将文本文件的数据导入到数据库中呢?在这里,主要利用了Oracle的外部表特性. Oracle外部表支持两种类型的驱动:一种是ORACLE_LOADER,外部表的数据必须来源于文件文件,另一种则是ORACLE_DATAPUMP,外部表的数据必须是二进制dump文件,该du