【问题标题】:SQL Retrieving an object from VARRAY in Oracle 11g DatabaseSQL 从 Oracle 11g 数据库中的 VARRAY 检索对象
【发布时间】:2013-06-11 15:54:14
【问题描述】:

我在 Oracle 11g 数据库中构建了一个架构 RTRD_W,其中包含一个表 rtrd_pri,该表具有一个 NOMNL 列,其类型定义为 VARRAY(10) OF KPS_ADM.NUMBER_T(定义的对象作为 KPS_ADM 模式中的一种类型)。我正在尝试运行查询以检索 varray 中的 KPS_ADM.NUMBER_T 对象,但我的 SQL 语法中不断返回错误。我建的功能贴在下面

CREATE or replace function RETRIEVEPRIREF RETURN KPS_ADM.NUMBER_T AS
REF1 KPS_ADM.NUMBER_T;
BEGIN
SELECT KPS_ADM.NUMBER_T INTO REF1 from table(NOMNL) WHERE (SELECT NOMNL FROM RTRD_W.rtrd_pri WHERE (syst_id like '%0516%'));
RETURN REF1;
END RETRIEVEPRIREF;

我知道查询 :SELECT NOMNL FROM RTRD_W.rtrd_pri WHERE (syst_id like '%0516%') 有效,并且确实返回了一个包含单个 KPS_ADM.NUMBER_T 对象的 varray,但我似乎无法正确地在 varray 中搜索以检索对象的语法。

谁能给出正确的语法来做到这一点?

【问题讨论】:

    标签: sql plsql oracle11g


    【解决方案1】:
    -- an object defined as a type in the KPS_ADM schema
    CREATE TYPE number_t        AS OBJECT (object_value NUMBER);
    CREATE TYPE varray_number_t AS VARRAY(10) OF number_t;
    
    CREATE TABLE rtrd_pri
    (
        column_one NUMBER
    ,   column_two varray_number_t
    );
    
    INSERT INTO rtrd_pri VALUES(1, (varray_number_t(number_t(11), number_t(22))));
    INSERT INTO rtrd_pri VALUES(2, (varray_number_t(number_t(33), number_t(44))));
    
    SELECT  column_one, OBJECT_VALUE AS column_two
    FROM    rtrd_pri, TABLE(rtrd_pri.column_two)
    ;
    
    COLUMN_ONE  COLUMN_TWO
    1           11
    1           22
    2           33
    2           44
    

    【讨论】:

    • 非常感谢您提供的信息。它对我来说非常有效
    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 2021-02-20
    • 2014-12-25
    • 2020-07-25
    • 2014-09-29
    • 2018-06-14
    • 1970-01-01
    • 2017-08-29
    相关资源
    最近更新 更多