2017-03-05 17 views
0

に建設された実行クエリ:PLSQL - 私は次のクエリを実行していますSELECT

SELECT 
'ALTER TABLE '||TABLE_NAME||' MODIFY ' || COLUMN_NAME || ' VARCHAR2('||DATA_LENGTH||' CHAR);' 
FROM 
    USER_TAB_COLUMNS 
WHERE 
    DATA_TYPE LIKE '%CHAR%' 
AND TABLE_NAME NOT LIKE '%VIEW' 
ORDER BY 
    TABLE_NAME, 
    COLUMN_NAME; 

出力は、それ自体であるが、私は「USER_TAB_COLUMNS」から選択テーブルを変更するために照会します。以下のような :

ALTER TABLE ADM_FILTER_ELEMENT_REF_T MODIFY ELMNT_REF_CONTEXT VARCHAR2(1020 CHAR); 

私はこの出力をキャッチし、クエリを実行する方法を知っていただきたいと思いますか? クエリは、バッチファイルから呼び出される.sqlスクリプトで実行されるように設計されています。

お知らせください。

+0

'immediate'が頭に浮かぶ実行します。 –

答えて

4

クエリの結果を無名ブロックでループし、execute immediateを使用して実行することができます。このような

何か:

begin 
    for q in (SELECT 
       'ALTER TABLE '||TABLE_NAME||' MODIFY (' || COLUMN_NAME || ' VARCHAR2('||DATA_LENGTH||'));' query 
       FROM 
        USER_TAB_COLUMNS 
       WHERE 
        DATA_TYPE LIKE '%CHAR%' 
       AND TABLE_NAME NOT LIKE '%VIEW' 
       ORDER BY 
        TABLE_NAME, 
        COLUMN_NAME 
       ) LOOP 
     execute immediate q.query; 
    end loop; 
end; 
/
+0

ステートメントが正しいかどうかわかりませんが、はい、即時クエリは1分前に​​提案したかった解決策です。 [EXECUTE IMMEDIATEステートメント](https://docs.oracle.com/cd/B12037_01/appdev.101/b10807/13_elems017.htm) – Shaq

+0

ソリューションを試しましたが、「ORA-01735:無効なALTER TABLEオプション 'エラーです。 –

+1

@DavidFaiz - 結果を使用する方法を示すソリューションを提供しました。クエリの構文に問題がありました。変更後、列とそのデータ型はカッコ内に入れる必要があります。答えを更新しました。 – GurV

関連する問題