rownum是个伪列,意思是对最后输出的结果加一个序号
第一
select * from a where rownum=1; 
如果输出若干行,那就只显示第一行
第二
select * from a where rownum=2;   
如果输出若干行,那就显示第二行。可是,只有一行的结果哪里来的rownum=2???
所以未选定行

解决方案 »

  1.   

    create or replace function a_f 
         return number as
    begin
         return 1;
    end;/////ok declare
       nn number;
    begin
       select a_f() into nn from dual;
       dbms_output.put_line(nn);
    end;
    /
      

  2.   

    slothboy(懒虫)的解释也不完全对,select * from a where rownum=2 ,即使有多行,
    也不会显示,rownum是伪列,如果等于时,只能是等于1,如果要等于2,可以用以下方法:
    select * from a where rownum<=2
    minus
    select * from a where rownum<=1;
      

  3.   

    1.select * from a where rownum<=2;
    2.execute immediate 'call a_f() into :nn' using nn;
      改为:  nn:=a_f();  试一下。
      

  4.   

    1
    上面的这句回答有问题,简直误人子弟
    -------------------------------------------
    select * from a where rownum=2;   
    如果输出若干行,那就显示第二行。
    -------------------------------------------
    我也解释不清为什么,但是就是不能这样用
    你可以用select * from (select rownum ad id,a.* from a)  where id = 2;2
    同意楼上的,补充一下,可以这样用:
    declare
       nn number;
    begin
       --execute immediate 'call a_f() into :nn' using nn;
       n:=a_f();
       dbms_output.put_line(nn);
    end;
      

  5.   

    纠正一下:
    select * from (select rownum as id,a.* from a)  where id = 2;是as,不是ad
      

  6.   

    select * from a where rownum=1;   ok
    select * from a where rownum=2;   未选定行rownum是一个伪列,他是对整个数据库的,不是对某个具体表的,
    where rownum=1 的列不一定是a表的列,第一行能执行使偶然的;
    where rownum=2 不能执行是没有这样的列或者列被删除
    rownum 的值和a表字段的值不能混为一谈
      

  7.   

    问题一:
    select * from a where rownum=1;   ok
    select * from (select rownum rm,a.* from a) where rm=2; ok问题二:
    set serveroutput on
    declare
       nn number;
    begin
       --execute immediate 'call a_f() into :nn' using nn;
       select a_f into nn from dual;    ok
       nn:=a_f;                         ok
       dbms_output.put_line(nn);
    end;
    /
      

  8.   

    上面的第二个语句我是模仿书上写的( 动态sql) 可是运行不了
    我运行书的代码同样出错
     
    同样谢谢大家
      

  9.   

    对于问题2
    使用楼主的动态SQL 应该是:
    declare
       nn number;
    begin
       execute immediate 'call a_f() into :arg1' using out nn;
       dbms_output.put_line(nn);
    end;
    楼主的错误:输出参数类型应使用 using out
      

  10.   

    结账了?
    我的意思是说
    select * from a where rownum=2;    输出若干行-〉要求显示第二行,即最终只要一行输出结果。可是,只有一行的结果哪里来的rownum=2???
    所以未选定行
    我晕倒了,这样解释有错么?