【问题标题】:Using ROWTYPE in PL/SQL VARRAY giving compilation errors在 PL/SQL VARRAY 中使用 ROWTYPE 会产生编译错误
【发布时间】:2013-06-15 14:53:36
【问题描述】:

如果我尝试下面的代码,那么它工作正常:

declare
type v_varray is varray(50) of emp%rowtype;
v_emp_details v_varray;
begin
select * bulk collect into v_emp_details from emp where dept_id = 1;
for i in 1 .. v_emp_details.count
loop
    dbms_output.put_line('Emp Name : ' || v_emp_details(i).emp_name);
end loop;
end;

但如果我尝试像这样将 VARRAY 创建为数据库对象:

create or replace type xyz is varray(20) of emp%ROWTYPE

为什么会出现编译错误?

【问题讨论】:

    标签: sql oracle plsql oracle10g


    【解决方案1】:
    CREATE OR REPLACE TYPE v_varray IS VARRAY(50) OF employees%ROWTYPE;
    -- Error(1,32): PLS-00329: schema-level type has illegal reference to HR.EMPLOYEES
    

    不允许使用 ROWTYPE,因为 ROWTYPE 是 PL/SQL 构造,在 SQL 创建类型语句中无法识别。

    如果你想共享一个类型,你可以这样做:

    CREATE OR REPLACE PACKAGE udt_types_pkg
    AS
        TYPE v_varray IS VARRAY(50) OF employees%ROWTYPE;
    END udt_types_pkg;
    -- PACKAGE UDT_TYPES_PKG compiled
    
    CREATE OR REPLACE PACKAGE working_pkg
    AS
        l_varray  udt_types_pkg.v_varray;
    END working_pkg;
    -- PACKAGE WORKING_PKG compiled
    

    【讨论】:

      【解决方案2】:

      我觉得应该是这样的

      create or replace type xyz as varray(20) of varchar2(50)
      

      Varray Tutorial

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-18
        • 1970-01-01
        • 1970-01-01
        • 2017-02-03
        • 2011-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多