首页 > 解决方案 > 在包中定义自定义类型

问题描述

我有以下类型:

create or replace TYPE t3_data AS OBJECT (
    vk   NVARCHAR2(12),
    pl   VARCHAR2(2000),
    dt   NUMBER,
    ay   CHAR(10),
    ao   CHAR(10),
    an   VARCHAR2(4000),
    r    NUMBER,
    c    CHAR(10)
);

我在如下函数中使用它:

FUNCTION pick_values RETURN t3_table PIPELINED

t3_data 和 t3_table 的关系如下:

create or replace TYPE t3_table IS
    TABLE OF t3_data;

有没有办法在我已经定义了函数的包中定义 t3_data 和 t3_table ?

标签: oracleplsql

解决方案


对象类型是 SQL 类型,因此它们不能在 PL/SQL 中创建。但是,您可以在包中定义记录类型而不是对象类型,并且您应该能够使用该记录类型来定义流水线表函数

create or replace package test_pkg
as
  type t3_data_rec is record (
    vk   NVARCHAR2(12),
    pl   VARCHAR2(2000),
    dt   NUMBER,
    ay   CHAR(10),
    ao   CHAR(10),
    an   VARCHAR2(4000),
    r    NUMBER,
    c    CHAR(10)
  );
  
  type t3_table is table of t3_data_rec;
  
  function pick_values 
    return t3_table pipelined;
end;
/

create or replace package body test_pkg
as
  function pick_values 
    return t3_table pipelined
  is
    l_rec t3_data_rec;
  begin
    l_rec.vk := N'foo';
    pipe row( l_rec );
  end;
end;
/

select *
  from table( test_pkg.pick_values );

推荐阅读