选择单个列值并将其存储在变量oracle sql中

Th3*_*m4n 4 sql oracle

我想获取特定的列值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;
/
Run Code Online (Sandbox Code Playgroud)

我在Oracle SQL Developer中遇到此错误:

错误报告:ORA-06550:第3行,第7列:PLS-00103:遇到以下其中一项时遇到符号"V_ID":

:=.(@%;符号":="代替"V_ID"继续.06550.00000 - "行%s,列%s:\n%s"*原因:通常是PL/SQL编译错误.*操作:

Ben*_*Ben 11

如果你想使用rownumorder 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;
/
Run Code Online (Sandbox Code Playgroud)

正如@raukh所说(当我写这篇文章时!)问题是print,应该是dbms_output.put_line()