5

我需要将一个序列值分配给一个变量,以便在序列值增加后稍后使用。我已经尝试过了,但它给出了一个错误:

variable imageID number;
select SEQ_IMAGE_ID.CURRVAL into :imageID from dual;

select * from IMAGES where IMAGE_ID = :imageID;


Error starting at line 2 in command:
select SEQ_IMAGE_ID.CURRVAL into :imageID from dual
Error report:
SQL Error: ORA-01006: bind variable does not exist
01006. 00000 -  "bind variable does not exist"

我已经三次检查序列名称是否正确,有什么想法吗?

4

3 回答 3

7

根据声明,您似乎在 SQL*Plus 或 SQL Developer 中执行此操作variable。您需要在 PL/SQL 块中进行分配,或者使用显式begin/end或使用exec隐藏它的调用:

variable imageID number;
exec select SEQ_IMAGE_ID.CURRVAL into :imageID from dual;
select * from IMAGES where IMAGE_ID = :imageID;

如果您使用的是 11g,则不需要select,您可以分配:

variable imageID number;
exec :image_id := SEQ_IMAGE_ID.CURRVAL;
select * from IMAGES where IMAGE_ID = :imageID;

您还可以使用替换变量:

column tmp_imageid new_value image_id;
select SEQ_IMAGE_ID.CURRVAL as tmp_imageID from dual;
select * from IMAGES where IMAGE_ID = &imageID;

注意从:表示绑定变量&到表示替换变量的变化。

于 2012-08-23T13:32:40.957 回答
2

在 PL/SQL 中,需要声明变量,如下所示:

declare
  V_IMAGEID;
begin
  select SEQ_IMAGE_ID.CURRVAL into V_IMAGEID from dual;

  select * /*into ... */ from IMAGES where IMAGE_ID = V_IMAGEID;
end;

如果您使用绑定变量,则必须绑定变量。错误消息表明情况并非如此。如何精确绑定变量取决于语言/情况。确保在绑定变量时使用正确的方向。在第一个(双重)查询中,您将需要一个 out 参数。您可能需要指定此项。

于 2012-08-23T13:26:33.033 回答
1

只需在 :imageId 之前删除 ':'。如果您处于触发器中,请使用 :new.imageid

单词变量也应该被删除

ps 我的意思是匿名块肯定。

于 2012-08-23T13:19:04.527 回答