在begin end语句块中,先执行update 然后执行alter talbe语句报错
如下:
begin
update TableName set FileldName=Value;
alter table TableName Rename column ID to ID_new;
end;错误如下:
第 3 行出现错误:
ORA-06550: 第 3 行, 第 1 列:
PLS-00103: 出现符号 "ALTER"在需要下列之一时:
begin case declare end
exception exit for goto if loop mod null pragma raise return
select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
如下:
begin
update TableName set FileldName=Value;
alter table TableName Rename column ID to ID_new;
end;错误如下:
第 3 行出现错误:
ORA-06550: 第 3 行, 第 1 列:
PLS-00103: 出现符号 "ALTER"在需要下列之一时:
begin case declare end
exception exit for goto if loop mod null pragma raise return
select update while with <an identifier>
<a double-quoted delimited-identifier> <a bind variable> <<
close current delete fetch lock insert open rollback
savepoint set sql execute commit forall merge pipe
解决方案 »
- 紧急求助,关于oracle存储过程传入字符串数组参数的问题。
- 怎么在sqlplus环境下展示clob字段的内容
- oracle 的package bodyies 问题
- 关于导出数据库中blob字段中图片的问题!!!!!!!!!!
- Oracle有Cross-reference和CRUD分析工具吗?
- 怎么用RMAN来备份数据?
- 如何在触发器中使用数据库连接
- 简单的触发器,就是搞不定!!
- 寻求帮助:我刚学Oracle想找一点关于Oracle的PDF格式的电子书
- win7 64位旗舰版 只安装 oracle 10g的 10201_client_win32位出错
- insert 一个大表缓慢
- pl/sql developer跳过数据库验证的问题
update TableName set FileldName=Value;
commit;
alter table TableName Rename column ID to ID_new;
end;
如:execute immediate 'alter table TableName Rename column ID to ID_new';
update t set nid = 2;
commit;
execute immediate 'alter table t rename column nid to id';
end;
begin
update TableName set FileldName=Value;
commit;
alter table TableName Rename column ID to ID_new;
end;
但错误是同样的。1楼的朋友肯定是不对的,
2,3楼的朋友这样是可行,但我不明白为什么一定要用动态SQL的方式才行?
一种是:execute immediate 'sql';
另一种是:dbms_utility.exec_ddl_statement('sql');
只是为什么oralce中要这么去执行呢?出于什么考量?既然都提供了DML与DDL语句同时出现的解决办法。
为何不可直接执行呢?偏偏用要动态SQL的方式去完成呢?另外,“Oracle规定:在块中执行DDL语句有两种方式”,哪有这样的说明,可否给个链接?本人学艺不精,望不吝赐教,感谢中!