2015-07-14 7 views
1

Я знаю, что я могу создать подтип внутри спецификации пакета, как:Создать или заменить глобальный подтип

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

Вы даже попытались создать свой «глобальный» тип? Если бы вы это сделали, вы бы увидели, что это вполне возможно. – Boneist

+1

@Boneist IMHO вы неправильно поняли вопрос. OP хочет создать глобальный * SUBTYPE * (а не глобальный * TYPE). AFAIK, это невозможно. –

+1

А я действительно! D'о. Нужно больше кофеина! Извинения, мое имя-есть! – Boneist

ответ

4

Насколько я знаю, подтипы функция 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

Теперь, когда я читал этот вопрос правильно * {;-), согласно the documentation вы действительно можете создать подтип:

«Это заявление показывает, как был создан подтип 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:

«Чтобы создать подтип, вы должны иметь при любой системе TYPE привилегии или привилегии объекта о супертипе ".

Смежные вопросы