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

2023-12-09

我在 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 服务器上工作。我发现类似的代码,其中“INCRMENT BY”参数是由脚本生成的。有人可以解释我的错误吗?


当你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;

这显示在普通 SQL 的示例。只是为了让您感到困惑,如果您在动态 SQL 中使用 PL/SQL,您仍然需要适合 PL/SQL 本身的分号 - 尽管不需要执行/您可以直接从客户端运行它。这显示在其他例子.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 oracle 中运行字符串作为查询 的相关文章

随机推荐