2016-10-27 1 views
2

Мне нужно объявить новый ТИП ОБЪЕКТА в PL/SQL для хранения строк в запросе соединения, который выбирает только несколько столбцов. Я могу создать ТИП просто отлично, но он становится частью схемы.Как создать новый ТИП ОБЪЕКТА в Oracle PL/SQL, если он еще не существует

Что-то вроде:

IF (SELECT COUNT(*) FROM user_objects WHERE LOWER(object_name) = 'my_custom_type') = 0 THEN 
    CREATE TYPE my_custom_type AS OBJECT 
    (
     ... 
    ); 
    /
END IF; 

DECLARE 
    v_foo my_custom_type%TYPE; 
BEGIN 
    -- Do stuff with v_foo... 
END; 
/

Как я могу проверить, если TYPE существует до его создания?

+0

Почему бы просто не «создать или заменить» его? –

+0

@WilliamRobertson: Я даже не знал, что это вариант. –

ответ

4

Если вам нужен новый тип SQL. Вы можете создать его с помощью динамического SQL.

DECLARE 
    v_count NUMBER(10); 
BEGIN 
    SELECT COUNT(*) INTO v_count 
    FROM user_objects 
    WHERE LOWER(object_name) = 'my_custom_type'; 

    IF v_count = 0 THEN 
     EXECUTE IMMEDIATE 'CREATE TYPE my_custom_type AS OBJECT (
      id  NUMBER(10), 
      name VARCHAR2(100) 
     )'; 
    END IF; 
END; 
/
+0

Хорошо. Это по меньшей мере помещает меня в блок PL/SQL, где я могу использовать оператор 'IF'. –

+0

Это похоже на работу, но я собираюсь обновить ваш ответ с помощью некоторого рабочего кода. Благодаря! –

+1

Я открывал курсор и прокручивал его, и я забыл, что могу выбрать в список имен переменных, что я и использовал вместо этого решения. Проголосовал и отметил это как ответ, потому что он действительно работает. –

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