如何在游标中执行DDL语句?

[复制链接]
查看11 | 回复7 | 2007-9-26 18:42:10 | 显示全部楼层 |阅读模式
以前的一段代码,用来生成重建索引的SQL语句。
心血来潮,能否不用生成语句,而是直接执行?

DECLARE
V_INDNAME VARCHAR2(100);
CURSOR C_IDX IS SELECT INDEX_NAME FROM USER_INDEXES WHERE LOGGING = 'NO';
BEGIN
OPEN C_IDX;
LOOP
FETCH C_IDX INTO V_INDNAME;
EXIT WHEN C_IDX%NOTFOUND;
DBMS_OUTPUT.PUT_LINE('ALTER INDEX '|| V_INDNAME ||' LOGGING;');[/COLOR]
END LOOP;
CLOSE C_IDX;
END;
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
关注啊
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
execute immediate' ddl 语句'
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
DECLARE
V_INDNAME VARCHAR2(100);
V_SQL VARCHAR2(1000);
CURSOR C_IDX IS SELECT INDEX_NAME FROM USER_INDEXES WHERE LOGGING = 'NO';
BEGIN
OPEN C_IDX;
LOOP
FETCH C_IDX INTO V_INDNAME;
EXIT WHEN C_IDX%NOTFOUND;
V_SQL:='ALTER INDEX '|| V_INDNAME ||' LOGGING';
DBMS_OUTPUT.PUT_LINE(V_SQL);
execute immediateV_SQL;
END LOOP;
CLOSE C_IDX;
END;
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
多谢提醒,想起来了。
这都忘掉了,呵呵。
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
为什么要做这种处理呢...
这些动作应该是非常规操作,,最好还是使用sqlplus,, 手工介入去处理吧..
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
注意ddl都会COMMIT
回复

使用道具 举报

千问 | 2007-9-26 18:42:10 | 显示全部楼层
最初由 jametong 发布
[B]为什么要做这种处理呢...
这些动作应该是非常规操作,,最好还是使用sqlplus,, 手工介入去处理吧.. [/B]


其实就是忘了语法,呵呵。
上面只是举个例子,让大家看清楚些。
谢谢回复的朋友。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行