【问题标题】:Can we use 'create or replace statement' in execute immediate statement?我们可以在执行立即语句中使用“创建或替换语句”吗?
【发布时间】:2015-09-11 16:10:27
【问题描述】:

我正在使用 oracle sql 开发人员。在该代码中,我需要使用执行立即语句来创建序列。

我的要求是检查要创建的新序列是否存在。如果它在那里,那么代码必须替换它。如果它不存在,那么代码必须创建它。

但是当我使用 create 或 replace 语句时,它会出错。如果我单独使用 create 语句,它工作正常。

然后,我使用了一些 case 语句来查找我们尝试创建的序列是否存在,然后我单独使用 create 语句来执行此操作。

我的问题是为什么我们不能在执行立即语句中使用创建或替换语句?

【问题讨论】:

  • 听起来你正在创建一个原子操作。我这样做是为了防止队列上的并发选择中出现竞争条件。我不确定Oracle,但这个答案似乎有它,“合并”:stackoverflow.com/questions/9332360/…

标签: oracle oracle-sqldeveloper


【解决方案1】:

这里的问题不是使用execute immediate,而是您尝试执行的语句。从文档中可以看出,Oracle 的 create sequence 语法根本没有 or replace 变体,无论您如何执行它。

您有两个选择,要么在尝试重新创建序列之前检查序列是否存在,要么只是尝试创建它并捕获错误。

【讨论】:

  • 我可以理解我们如何只使用 create 语句。但是,立即执行语句不允许或替换变体。这是该语句的正常行为吗?
  • @Kalyan 该问题与execute immediate 无关。根本没有or replace 变体。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多