2016-10-27 3 views
2

いくつかの列のみを選択する結合クエリで行を保持するには、PL/SQLで新しいOBJECT TYPEを宣言する必要があります。 TYPEをうまく作成できますが、スキーマの一部になります。以下のような既に存在しない場合、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

少なくとも私はIF文を使用できるPL/SQLブロックに入れています。 –

+0

これはうまくいくようですが、私はあなたの答えをいくつかの作業コードで更新するつもりです。ありがとう! –

+1

私はカーソルを開いてループしていましたが、このソリューションの代わりに使用を終了した変数名のリストにSELECTすることができません。それはうまく動作しているので、投票して答えとしてマークしました。 –

関連する問題