gpt4 book ai didi

sql - 在 PL/SQL VARRAY 中使用 ROWTYPE 会产生编译错误

转载 作者:行者123 更新时间:2023-12-03 23:32:16 27 4
gpt4 key购买 nike

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

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

为什么会出现编译错误?

最佳答案

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

关于sql - 在 PL/SQL VARRAY 中使用 ROWTYPE 会产生编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17124888/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com