使用立即执行调整数据文件 oracle 的大小
Posted
技术标签:
【中文标题】使用立即执行调整数据文件 oracle 的大小【英文标题】:Resize datafile oracle using execute immediate 【发布时间】:2015-05-14 10:57:38 【问题描述】:我需要调整这个数据文件'+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919'的大小,为什么这个简单的过程是错误的?
还有其他选择吗?
SQL> begin
2 execute immediate 'alter database datafile '+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919' resize 732M';
3 exit;
4 /
execute immediate 'alter database datafile '+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919' resize 732M';
*
第 2 行出现错误: ORA-06550:第 2 行,第 87 列: PLS-00103:在预期以下情况之一时遇到符号“.269”: . ( * @ % & = - + ; at in 是 mod 余数不是 rem return 返回 或 != 或 ~= >= and or like like2 like4 likec 在使用 || 之间大部分 成员子集
【问题讨论】:
How to anticipate and escape ' in oracle 的可能重复项 【参考方案1】:你需要用双引号('')转义单引号(')
begin
execute immediate 'alter database datafile ''+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919'' resize 732M';
end;
/
但是你为什么要使用动态sql呢?你可以写
alter database datafile '+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919' resize 732M';
在 sqlplus 中?
【讨论】:
您不能用双引号(引号)转义单引号(也称为撇号) - 您使用两个撇号,一个接一个。代码是正确的,但解释令人困惑。 是的,在sqlplus中,我正在做一个维护表空间的过程,将是自动的。 但是,这个说法有问题。 SQL> begin 2 execute immediate 'alter database datafile ''+GMPDATDESA01/prod/datafile/apps_ts_tx_idx.269.878649919'' resize 8500M'; 3个出口; 4 / 退出; * 第 3 行出现错误:ORA-06550:第 3 行,第 5 列:PLS-00103:在预期以下情况之一时遇到符号“文件结尾”:(开始案例声明结束异常退出 goto if loop mod null pragma raise return select update while with @SandyRamirez - 你的第 3 行是exit;
而不是 end;
这不适合 PL/SQL 块?以上是关于使用立即执行调整数据文件 oracle 的大小的主要内容,如果未能解决你的问题,请参考以下文章