programing

패키지/프로시저 외부에서 Oracle 연관 배열 유형을 생성할 수 있습니까?

javajsp 2023. 10. 21. 09:57

패키지/프로시저 외부에서 Oracle 연관 배열 유형을 생성할 수 있습니까?

Oracle Database 10g에서 패키지 또는 프로시저 외부에 연관 배열 유형을 생성할 수 있습니까?이 연관 배열 유형을 다른 유형으로 참조할 수 있도록 이 작업을 수행할 수 있으면 좋겠습니다.예를 들어,

create type my_type_map is table of varchar2(10) index by varchar2(10);

create type my_other_type as object (   
    id number(15),
    member procedure initialize(p_my_type_map my_type_map)
) not instantiable not final;

오류는 다음과 같습니다.

SQL> create type my_type_map is table of varchar2(20) index by varchar2(10);
  2  /

Warning: Type created with compilation errors.

SQL> show errors;
Errors for TYPE MY_TYPE_MAP:

LINE/COL ERROR
-------- -----------------------------------------------------------------
0/0      PL/SQL: Compilation unit analysis terminated
1/21     PLS-00355: use of pl/sql table not allowed in this context
SQL> 

Oracle에서 고려하는 사항은 다음과 같습니다.

index by varchar2(10)    

PL/SQL이 될 것이며 SQL 유형을 생성하는 데 허용되지 않습니다.Oracle이 패키지 외부에서 연관 어레이를 정의하는 것을 허용하지 않는 경우 좋은 대안이 있습니까?패키지 내에서 Oracle Object를 확장하여 모든 유형을 동일한 패키지에 정의할 수 있는 유형을 생성할 수 있습니까?

고마워요, 제프

편집: 코드 샘플 수정, 로그 추가, 질문으로 가능한 대안 추가

대답은 아니오입니다. Boolean(부울) 유형 변수를 개체에 추가하는 유형을 만드는 것 이상으로 수행하려는 작업을 수행할 수 없습니다.개체의 항목에는 PL/SQL 유형이 아닌 Oracle 유형이 포함되어야 합니다.약간 투박한 대안은 다음과 같습니다.

CREATE TYPE t_aa AS VARRAY(10) OF VARCHAR2(10);

CREATE OR REPLACE TYPE t_ua AS OBJECT (ID NUMBER(15)
                                     , MEMBER PROCEDURE initialize(p_aa t_aa)
                                     , MEMBER PROCEDURE initialize(p_aa_i t_aa))
                               NOT INSTANTIABLE NOT FINAL;

두 개의 VARRAY에 관련 변수 쌍을 저장합니다.가능한 최대 크기의 어레이를 알아야 합니다.

오류에서 알 수 있듯이 PL/SQL 유형입니다.패키지의 공개 사양에서 이를 선언하는 것을 막을 수 없습니다. 그러면 필요한 PL/SQL 코드에서 이를 참조할 수 있습니다.

언급URL : https://stackoverflow.com/questions/1066476/is-it-possible-to-create-oracle-associative-array-type-outside-of-a-package-proc