如何为变量分配序列值?

时间:2012-08-23 13:13:54

标签: sql oracle

我需要为变量分配一个序列值,以便在序列值递增后使用。我试过这个,但它给出了一个错误:

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"

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

3 个答案:

答案 0 :(得分:7)

您似乎是在{* 1}}声明中在SQL * Plus或SQL Developer中执行此操作。您需要在PL / SQL块中进行分配,使用明确的variable / begin或隐藏该end的{​​{1}}调用:

exec

如果您使用的是11g,则不需要variable imageID number; exec select SEQ_IMAGE_ID.CURRVAL into :imageID from dual; select * from IMAGES where IMAGE_ID = :imageID; ,您只需指定:

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; 更改为表示绑定变量,更改为:以指示替换变量。

答案 1 :(得分: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参数。您可能需要指定它。

答案 2 :(得分:1)

之前删除':':imageId。如果你在触发器中使用:new.imageid

也应该删除单词变量

P.S。我的意思是匿名阻止。