【问题标题】:SqlPlus, tablespace parameter, and escaping the dot characterSqlPlus、表空间参数和转义点字符
【发布时间】:2015-10-06 00:42:45
【问题描述】:

我有一个 Sqlplus 脚本,我需要将它作为流程链的一部分执行,其目的是摆脱两个用户定义的对象:

myscript.sql

def tablespaceName=&1

drop type &tablespaceName.my_user_tab;
commit;
drop type &tablespaceName\.my_user_type;
commit;
/

执行:Sqlplus myDbUser/myDbPassword@myDbSID @myscript.sql TESTTABLESPACE

Sqlplus 引擎不知何故丢失了将表空间与对象名称分开的点字符:

old   1: drop type &tablespaceName.my_user_tab
new   1: drop type TESTTABLESPACEmy_user_tab
drop type TESTTABLESPACEmy_user_tab
*
ERROR at line 1:
ORA-04043: object TESTTABLESPACEMY_USER_TAB does not exist

如何让 Sqlplus 尊重该点并停止从脚本中删除它?

【问题讨论】:

  • "tablespacename" 在这种情况下似乎是一个非常具有误导性的参数名称 - 您的意思是“schema_name”吗?我假设您指的是拥有这两个特定对象的架构。
  • 您将“表空间”与“模式”混淆了——这是两个完全不同的东西。
  • 是的。我混淆了表空间和模式。现在到重点:如何让点分隔符停止消失。

标签: oracle oracle11g sqlplus


【解决方案1】:

首先,DDL 不需要提交/回滚。

为了逃避这些点。只需使用双点即可。

drop type &tablespaceName..my_user_tab;

来自Doc

如果您希望在替换后立即附加字符 变量,使用句点将变量与字符分开。

【讨论】:

  • 双点符号的来源?
猜你喜欢
  • 2021-08-17
  • 2013-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-06
  • 1970-01-01
  • 2013-01-13
相关资源
最近更新 更多