Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将数据从行中选择到oracle udt对象集合中_Oracle_User Defined Types - Fatal编程技术网

将数据从行中选择到oracle udt对象集合中

将数据从行中选择到oracle udt对象集合中,oracle,user-defined-types,Oracle,User Defined Types,我有一个叫做test的普通表,它有很多列 然后我有一个UDT,它的行对应于这些列 我想做的是创建一个从表中获取数据的过程,然后为每一行使用该数据创建该UDT的新实例,然后返回这些UDT的列表 我已经搜索了很多地方,但我对所有这些都是一个绝对的初学者,我还没有找到答案 有人能给我指出正确的方向吗? Oracle 11g R2架构设置: CREATE TABLE Test ( A, B, C, D, E ) AS SELECT LEVEL, LEVEL * 500, SQRT( LEVEL ), C

我有一个叫做test的普通表,它有很多列

然后我有一个UDT,它的行对应于这些列

我想做的是创建一个从表中获取数据的过程,然后为每一行使用该数据创建该UDT的新实例,然后返回这些UDT的列表

我已经搜索了很多地方,但我对所有这些都是一个绝对的初学者,我还没有找到答案

有人能给我指出正确的方向吗?

Oracle 11g R2架构设置

CREATE TABLE Test ( A, B, C, D, E ) AS
SELECT LEVEL, LEVEL * 500, SQRT( LEVEL ), CHR( 64 + LEVEL ), RPAD( CHR( 64 + LEVEL ), 8, CHR( 64 + LEVEL ) )
FROM DUAL
CONNECT BY LEVEL <= 26
/

CREATE TYPE Test_Record AS OBJECT (
  A NUMBER,
  B NUMBER,
  C NUMBER,
  D CHAR(1),
  E CHAR(8)
)
/

CREATE TYPE Test_Record_Table AS TABLE OF Test_Record
/

CREATE PROCEDURE get_Table_Of_Test_Records (
  p_records OUT Test_Record_Table
)
IS
BEGIN
  SELECT Test_Record( A, B, C, D, E )
  BULK COLLECT INTO p_records
  FROM   Test;
END get_Table_Of_Test_Records;
/
DECLARE
  trt Test_Record_Table;
BEGIN
  get_Table_Of_Test_Records( trt );

  -- Do something with the collection.
END;

+1这直接回答了问题。尽管这取决于上下文,但在不使用任何PL/SQL的情况下也可能获得数据<代码>获取测试记录的表格(trt)可以替换为
从测试中选择cast(收集(测试记录(a、b、c、d、e))作为测试记录表)到trt中