sqlserver和sybase在存储过程中能直接返回结果集! 但是oracle不能这样写:select * from 你要先定义一个cursor type! 然后用这个cursor来返回!! 1、 CREATE OR REPLACE PACKAGE "SCOTT"."HWTYPE" as TYPE HWCURSOR IS REF CURSOR; end; 2、 CREATE OR REPLACE PROCEDURE "SCOTT"."PROC_TEST_CURSOR" (DDD OUT HWTYPE.HWCURSOR) as var_DEPTNO DEPT.DEPTNO%TYPE; var_DNAME DEPT.DNAME%TYPE; var_LOC DEPT.LOC%TYPE; begin
--这样可以动态设置游标了。 AA:='SELECT DEPTNO,DNAME,LOC FROM DEPT'; open DDD for aa;
--用起来和一般游标一样。 FETCH DDD INTO var_DEPTNO,var_DNAME,var_LOC; WHILE DDD%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(var_DEPTNO); DBMS_OUTPUT.PUT_LINE(var_DNAME); DBMS_OUTPUT.PUT_LINE(var_LOC); FETCH DDD INTO var_DEPTNO,var_DNAME,var_LOC; END LOOP; CLOSE DDD;
EXCEPTION WHEN OTHERS THEN IF DDD%ISOPEN THEN CLOSE DDD; END IF;
end; 3、sqlplus中进行测试:set serverout on var aa REFCURSOR exec scott.PROC_TEST_CURSOR(:aa); print :aa;这么用就行了!
create or replace procedure kkkk(a in number ) is begin select * from function_points where func_point_id=a end kkkk;这个写法为什么不行 哈? 没什么为什么,ORACLE就是不给你返回在ORACLE中不能象MSSQL一样直接返回一个结果集,至少目前不能。 但ORACLE可以返回游标,间接的达到返回结果集的目的。
如果不行也想知道如何才能实现相同的功能在oracal下!
但是oracle不能这样写:select * from
你要先定义一个cursor type!
然后用这个cursor来返回!!
1、
CREATE OR REPLACE PACKAGE "SCOTT"."HWTYPE" as
TYPE HWCURSOR IS REF CURSOR;
end;
2、
CREATE OR REPLACE PROCEDURE "SCOTT"."PROC_TEST_CURSOR" (DDD OUT
HWTYPE.HWCURSOR)
as
var_DEPTNO DEPT.DEPTNO%TYPE;
var_DNAME DEPT.DNAME%TYPE;
var_LOC DEPT.LOC%TYPE;
begin
--这样可以动态设置游标了。
AA:='SELECT DEPTNO,DNAME,LOC FROM DEPT';
open DDD for aa;
--用起来和一般游标一样。
FETCH DDD INTO var_DEPTNO,var_DNAME,var_LOC;
WHILE DDD%FOUND LOOP
DBMS_OUTPUT.PUT_LINE(var_DEPTNO);
DBMS_OUTPUT.PUT_LINE(var_DNAME);
DBMS_OUTPUT.PUT_LINE(var_LOC);
FETCH DDD INTO var_DEPTNO,var_DNAME,var_LOC;
END LOOP;
CLOSE DDD;
EXCEPTION
WHEN OTHERS THEN
IF DDD%ISOPEN THEN
CLOSE DDD;
END IF;
end;
3、sqlplus中进行测试:set serverout on
var aa REFCURSOR
exec scott.PROC_TEST_CURSOR(:aa);
print :aa;这么用就行了!
begin
select * from function_points where func_point_id=a
end kkkk;这个写法为什么不行 哈?
没什么为什么,ORACLE就是不给你返回在ORACLE中不能象MSSQL一样直接返回一个结果集,至少目前不能。
但ORACLE可以返回游标,间接的达到返回结果集的目的。
不是有存储过程啊?
还有打算今天去买本书来看,给推荐一本吧?主要介绍Oracal下面SQL的语法,还有创建过程,函数包啊之类的东西的书
这个变量在这个存储过程中是无法声明的。