我正在执行以下查询:
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 :(得分: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;
/