【问题标题】:Resize datafile oracle using execute immediate使用立即执行调整数据文件 oracle 的大小
【发布时间】:2023-04-06 19:48:01
【问题描述】:

我需要调整这个数据文件'+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 在使用 || 之间大部分 成员子集

【问题讨论】:

标签: oracle oracle11g execute-immediate data-files


【解决方案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 块?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-19
  • 2020-12-20
  • 2023-04-11
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多