PLSQL - 执行在SELECT中构建的查询

时间:2017-03-05 14:09:56

标签: oracle plsql

我正在执行以下查询:

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脚本执行,该脚本从批处理文件中调用。

请告知。

1 个答案:

答案 0 :(得分: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;
/