首页 文章

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

提问于
浏览
3

我想获取特定的列值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:当期望以下之一时遇到符号“V_ID”::= . (@%;符号“:=”代替“V_ID”继续.06550 . 00000 - “行%s,列%s:\ n%s”*原因:通常是PL / SQL编译错误 . *操作:

3 回答

  • 2

    如果要使用 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;
    /
    

    正如@raukh所说(虽然我正在写这个!)问题是 print ,应该是 dbms_output.put_line()

  • 10

    这个:

    Print v_id;
    

    无效 . 可能你的意思是:

    dbms_output.put_line(v_id);
    

    ? (请注意,您可能需要运行

    set serveroutput on;
    

    预先为了上述效果 . )

  • 4

    PRINT isn 't a valid PL/SQL command, so that' s会造成问题 . 也许你想要

    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;
    /
    

相关问题