我知道我可以在包规范中创建一个子类型,如:
CREATE OR REPLACE PACKAGE XY
AS
SUBTYPE type_sdebug IS VARCHAR (200);
...
END;
/
如果我想在另一个包中使用相同的子类型,那么我需要再次重新定义相同的类型。有没有办法创建或替换全局子类型,如:
CREATE OR REPLACE TYPE STRING_ARRAY AS VARRAY(500) OF VARCHAR2(30);
/
答案 0 :(得分:4)
据我所知,SUBTYPE是一个PL / SQL功能,因此您无法全局创建它们。但是没有什么可以阻止您在另一个包中使用您的包XY
中定义的类型(例如AB
):
CREATE OR REPLACE PACKAGE XY
AS
SUBTYPE type_sdebug IS VARCHAR (200);
END;
CREATE OR REPLACE PACKAGE AB
AS
PROCEDURE print_it(p_Debug in XY.type_sdebug);
END;
CREATE OR REPLACE PACKAGE BODY AB
AS
PROCEDURE print_it(p_Debug in XY.type_sdebug) is
begin
dbms_output.put_line(p_Debug);
end;
END;
declare
v_Debug XY.type_sdebug default 'hello world';
begin
ab.print_it(v_Debug);
end;
答案 1 :(得分:1)
现在我已经正确地阅读了这个问题* {;-),根据the documentation你确实可以创建一个子类型:
“此语句显示样本oe架构中的子类型corporate_customer_typ是如何创建的。它基于前面示例中创建的customer_typ超类型,并添加了account_mgr_id属性。为表格提供了一个假设的名称,以便您可以在测试数据库中复制此示例:“
CREATE TYPE corporate_customer_typ_demo UNDER customer_typ
( account_mgr_id NUMBER(6)
);
根据prerequisites for creating types:
,您可能需要其他权限才能执行此操作“要创建子类型,您必须具有UNDER ANY TYPE系统特权或超类型的UNDER对象特权。”