PL/SQL table


PL/SQL表

一,什么是PL/SQL表?
首先PL/SQL表和记录(Record)一样,都是复合数据类型。可以看做是一种用户自定义数据类型。
PL/SQL表由多列单行的标量构成的临时索引表对象。组成类似于一维数组。
区别和联系记录(Record)的单行多列和物理存储数据的表。
Record + PL/SQL表可以进行数据的多行多列存储。
生命周期在程序块内。


二,PL/SQL表的组成结构
PL/SQL表只有两列,其中第一列为索引列为Integer类型索引列,9i后可以支持字符索引。第二列为用户自定义列,声明用户可用列类型.
通过索引列中的索引值来操作PL/SQL表中对应的用户自定义列。类似于键值对。
确保索引值的唯一性。如果索引值重复不会报错,会覆盖前面的值。

三,如何创建和使用PL/SQL表?

①声明PL/SQL表类型对象
语法:
   TYPE PL/SQL表名 IS TABLE OF 可用列类型 [NOT NULL]
    INDEX BY BINARY_INTEGER;

可用列类型可以为Oracle的数据类类型以及用户自定义类型;

属性方法:
   count --返回pl/sql表的总行数;
   delect --删除pl/sql表的所有内容;
   delect(行数) --删除pl/sql表的指定的行;
   delct(开始行,结束行) --删除pl/sql表的多行;
   first --返回表的第一个INDEX;
   next(行数) --这个行数的下一条的INDEX;
   last --返回表的最后一个INDEX;

②声明PL/SQL表类型变量:
语法:
   PL/SQL表类型变量名   PL/SQL表类型;

③数据填充和访问
语法:
   PL/SQL表类型变量名(索引列值) := 填充声明类型值;
  
   PL/SQL表类型变量名.属性方法名;

例子:
Declare
Type MyTabType Is Table Of VarChar2(10) Index By Binary_Integer;
MyTab MyTabType;
vN Number(4);
Begin
MyTab(1) := ''A'';
MyTab(2) := ''B'';
MyTab(3) := ''C''; --覆盖前面索引值为3对应的列值B
vN := MyTab.First;
DBMS_OUTPUT.PUT_LINE(''First index:''||'' ''||vN ||'' '');
vN := MyTab.Last;
DBMS_OUTPUT.PUT_LINE(''last index:''||'' ''||vN);

DBMS_OUTPUT.PUT_LINE(''删除index 3 后 First值:''||'' ''||MyTab(MyTab.First));
DBMS_OUTPUT.PUT_LINE(''Last值:''||'' ''||MyTab(MyTab.Last));
End;


例子:使用循环填充和访问PL/SQL表
Declare
Type MyTabType Is Table Of VarChar2(10) Index By Binary_Integer;
MyTab MyTabType;
vN Number(10);
Begin
For varE In (select empno,ename from empa order by ename)
Loop
   MyTab(varE.empno) := varE.ename;
End Loop;
vN := MyTab.First;
For i in 1..MyTab.count
Loop
       dbms_output.put_line(vN||'' ''||myTab(vN));
       vN := myTab.next(vN);
    End Loop;
End;

例子:向PL/SQL表中插入数据
Declare
Type MyTabType Is Table Of VarChar2(10) Index By Binary_Integer;
MyTab MyTabType;
Begin
MyTab(1) := ''A'';
MyTab(2) := ''B'';
MyTab(3) := ''C'';
DBMS_OUTPUT.PUT_LINE(''index 3:''||'' ''||MyTab(3));
MyTab(3) := ''D''; --覆盖前面索引值为3对应的列值B
DBMS_OUTPUT.PUT_LINE(''index 3:''||'' ''||MyTab(3));
End;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们在Java调用存储过程并尝试获取一个PL/SQL TABLE类型(也称为类型为TABLEOracle数据库对象)的输出参数时,可能会遇到类型错误的问题。这是因为Java与Oracle的类型定义方式不同,需要进行一些额外的处理。 解决方法如下: 1.使用Oracle的JDBC驱动程序,以便能够使用Oracle的特殊数据类型。 2.将Java的Array类型转换为Oracle的ARRAY类型,然后将其传递给存储过程。 3.在存储过程,将ARRAY类型转换为TABLE类型,然后再将其返回给Java。 下面是一段示例代码,演示了如何在Java调用存储过程并获取一个PL/SQL TABLE类型的输出参数: ```java Connection conn = DriverManager.getConnection(url, username, password); CallableStatement cstmt = conn.prepareCall("{call stored_proc(?)}"); // 定义一个Java数组 String[] array = {"value1", "value2", "value3"}; // 将Java数组转换为Oracle数组 ArrayDescriptor descriptor = ArrayDescriptor.createDescriptor("MY_ARRAY_TYPE", conn); ARRAY oracleArray = new ARRAY(descriptor, conn, array); // 将Oracle数组设置为CallableStatement对象的参数 cstmt.setArray(1, oracleArray); // 执行CallableStatement对象,调用存储过程 cstmt.execute(); // 获取CallableStatement对象的输出参数 ARRAY outputArray = (ARRAY) cstmt.getObject(2); // 将Oracle数组转换为Java数组 String[] output = (String[]) outputArray.getArray(); // 处理Java数组 ... ``` 在以上示例,我们首先使用Oracle的JDBC驱动程序,然后将Java的Array类型转换为Oracle的ARRAY类型。接着,我们将Oracle数组设置为CallableStatement对象的参数,并执行CallableStatement对象,调用存储过程。最后,我们将Oracle数组转换为Java数组,并进行必要的处理。 需要注意的是,在这个示例,我们假设存储过程的输出参数是MY_ARRAY_TYPE类型的一个TABLE对象。如果存储过程的输出参数类型不同,需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值