在 oracle 中运行字符串作为查询

Posted

技术标签:

【中文标题】在 oracle 中运行字符串作为查询【英文标题】:run string as query in oracle 【发布时间】:2013-03-07 08:52:08 【问题描述】:

我在 Oracle 中遇到了一个小问题。我尝试创建一个序列,用于在已包含数据的表中生成 ID。我尝试使用以下匿名块。

declare y varchar2(2000);
BEGIN
  SELECT 'CREATE SEQUENCE ID_SEQ MINVALUE 1 MAXVALUE 9999999999 START WITH ' || (max(ID)+1) || ' INCREMENT BY 1 CACHE 20;' INTO y FROM TEST_TABLE;
  --dbms_output.put_line(y);
  execute immediate y;
end;

我收到以下错误:

Error report:
ORA-00911: invalid character
ORA-06512: at line 5
00911. 00000 -  "invalid character"

如果我执行 y 变量的值,它会完美运行。我使用 SQL Developer 作为输入接口并在 11g r2 Oracle 服务器上工作。我发现了类似的代码,其中“INCREMENT BY”参数是由脚本生成的。有人可以解释我的错误吗?

【问题讨论】:

【参考方案1】:

当你execute immediate时,你运行的命令末尾不应该有分号;这是 SQL Developer(以及 SQL*Plus 和其他客户端)中的命令分隔符,而不是 SQL 语句本身的一部分。

SELECT 'CREATE SEQUENCE ID_SEQ MINVALUE 1 MAXVALUE 9999999999 START WITH '
    || (max(ID)+1) || ' INCREMENT BY 1 CACHE 20' INTO y FROM TEST_TABLE;

这在examples for plain SQL 中显示。只是为了帮助您混淆,如果您在动态 SQL 中使用 PL/SQL,您仍然需要适合 PL/SQL 本身的分号 - 尽管不是您用来直接从客户。这显示在other examples。

【讨论】:

以上是关于在 oracle 中运行字符串作为查询的主要内容,如果未能解决你的问题,请参考以下文章

如何选择包含特定子字符串的单词列表作为 SQL 查询(oracle)的一部分?

oracle 字符串匹配查询

oracle 中where条件的拼接,拼接好别的表使用作为查询条件,该怎么写

查找特定字符串格式的 Oracle 查询

将日期附加到字符串以在 oracle 中获取表名并对其进行选择查询

使用 regexp_substr 在 Oracle 中按空格和字符拆分字符串作为分隔符