我想获取特定的列值a.id并将其存储到变量v_id中。然后使用此值传递给存储过程。
DECLARE v_id a.id%TYPE;
BEGIN
SELECT id into v_id from a where a.name='test' and rownum <2 order by id desc;
Print v_id;
doSomething(v_id);
END;
/
我在Oracle SQL Developer中收到此错误:
错误报告:ORA-06550:第3行第7列:PLS-00103:遇到了 符号&#34; V_ID&#34;期待以下之一:
:=。 (@%;符号&#34;:=&#34;代替&#34; V_ID&#34;到 继续。 06550. 00000 - &#34;行%s,列%s:\ n%s&#34; *原因:通常是PL / SQL编译错误。 *操作:
答案 0 :(得分:10)
如果您想使用rownum
和order by
将订单放在子查询中。没有其他方法可以保证您获得正确的值。
处理可能没有与您的查询匹配的id
的可能性也是一种好习惯。我添加了一个额外的begin... end;
块来处理这个问题。
declare
v_id a.id%type;
begin
begin
select id into v_id
from ( select id
from a
where name = 'test'
order by id desc )
where rownum < 2
;
exception when no_data_found then
v_id := null;
end;
dbms_output.put_line(v_id);
doSomething(v_id);
end;
/
正如@raukh所指出的那样(当我写这篇文章的时候!)问题是print
,应该是dbms_output.put_line()
答案 1 :(得分:4)
此:
Print v_id;
无效。可能你的意思是:
dbms_output.put_line(v_id);
? (请注意,您可能需要运行
set serveroutput on;
预先以使上述效果发生。)
答案 2 :(得分:2)
PRINT
不是有效的PL / SQL命令,因此会产生问题。也许你想要
DECLARE
v_id a.id%TYPE;
BEGIN
SELECT id
into v_id
from (SELECT id
FROM a
where a.name='test'
order by id desc)
where rownum < 2;
dbms_output.put_line( v_id );
doSomething(v_id);
END;
/