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

variable宣言から、SQL*Plus または SQL Developer でこれを行っているようです。begin明示的な/を使用するか、それを非表示endにするexec呼び出しを使用して、PL/SQL ブロックで割り当てを行う必要があります。

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 に答える