rownum是个伪列,意思是对最后输出的结果加一个序号
第一
select * from a where rownum=1;
如果输出若干行,那就只显示第一行
第二
select * from a where rownum=2;
如果输出若干行,那就显示第二行。可是,只有一行的结果哪里来的rownum=2???
所以未选定行
第一
select * from a where rownum=1;
如果输出若干行,那就只显示第一行
第二
select * from a where rownum=2;
如果输出若干行,那就显示第二行。可是,只有一行的结果哪里来的rownum=2???
所以未选定行
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;
/
也不会显示,rownum是伪列,如果等于时,只能是等于1,如果要等于2,可以用以下方法:
select * from a where rownum<=2
minus
select * from a where rownum<=1;
2.execute immediate 'call a_f() into :nn' using nn;
改为: nn:=a_f(); 试一下。
上面的这句回答有问题,简直误人子弟
-------------------------------------------
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;
select * from (select rownum as id,a.* from a) where id = 2;是as,不是ad
select * from a where rownum=2; 未选定行rownum是一个伪列,他是对整个数据库的,不是对某个具体表的,
where rownum=1 的列不一定是a表的列,第一行能执行使偶然的;
where rownum=2 不能执行是没有这样的列或者列被删除
rownum 的值和a表字段的值不能混为一谈
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;
/
我运行书的代码同样出错
同样谢谢大家
使用楼主的动态SQL 应该是:
declare
nn number;
begin
execute immediate 'call a_f() into :arg1' using out nn;
dbms_output.put_line(nn);
end;
楼主的错误:输出参数类型应使用 using out
我的意思是说
select * from a where rownum=2; 输出若干行-〉要求显示第二行,即最终只要一行输出结果。可是,只有一行的结果哪里来的rownum=2???
所以未选定行
我晕倒了,这样解释有错么?