创建或替换全局子类型

My-*_*-Is 1 oracle plsql subtype

我知道我可以在包规范中创建一个子类型,例如:

CREATE OR REPLACE PACKAGE XY
AS
  SUBTYPE type_sdebug IS VARCHAR (200);
  ...
END;
/
Run Code Online (Sandbox Code Playgroud)

如果我想在另一个包中使用相同的子类型,那么我需要再次重新定义相同的类型。有没有办法创建或替换全局子类型,例如:

CREATE OR REPLACE TYPE STRING_ARRAY AS VARRAY(500) OF VARCHAR2(30);
/
Run Code Online (Sandbox Code Playgroud)

Fra*_*itt 5

据我所知,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;
Run Code Online (Sandbox Code Playgroud)