我需要为变量分配一个序列值,以便在序列值递增后使用。我试过这个,但它给出了一个错误:
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"
我已经三次检查过序列名称是否正确,有什么想法吗?
答案 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。我的意思是匿名阻止。