3

SQL*Plusを使用しています。以下のクエリを使用すると、エラーが発生します

Error report:
ORA-06550: line 4, column 1:
PLS-00428: an INTO clause is expected in this SELECT statement

クエリ

declare 
id varchar2(80) :='test123'; 
begin
select test_quote,test_id from order_link where id = 'test123';
end;
4

2 に答える 2

14

そのためにPL/SQLブロックを使用している理由がわかりません。宣言したものを使用していないidため、混乱を避けるために、列名とは異なる名前を付けることをお勧めします。

ただし、SQL * Plusでバインド変数を宣言し、それを選択することができます。

var l_test_quote varchar2(80); -- or whatever type/size you need
var l_test_id varchar2(80);

declare 
    l_id varchar2(80) :='test123'; 
begin
    select test_quote, test_id
    into :l_test_quote, :l_test_id
    from order_link
    where id = l_id;
end;
/

print l_test_quote
print l_test_id

ブロックの外側で定義された変数への参照の前に注意してください:。これは、それらがバインド変数であることを示しています。l_idブロック内で宣言されているため、前に。はありません:

この場合l_id、ブロックの外側で定義し、バインド変数を使用しながらPL/SQLを回避することもできます。

var l_id varchar2(80);

exec :l_id := 'test123';

select test_quote, test_id
from order_link
where id = :l_id;

メインのクエリはPL/SQLではなくなったため(ただし、これexecは1行の匿名ブロックの省略形です)、select ... intoこれらの変数を宣言する必要はありません。

于 2012-07-31T10:29:01.053 に答える
1

これを試して:

declare 
id varchar2(80) :='test123'; 
  v_test_quote order_link.test_quote%type;
  v_test_id    order_link.test_id%type;
begin
  select  test_quote,test_id 
  into    v_test_qoute, v_test_id 
  from    order_link 
  where   id = 'test123';
end;
于 2012-07-31T10:26:38.217 に答える