定义一个ref cursor类型,就可以了
解决方案 »
- 从oracle10client 连接到oracle9备份的问题
- 所有类别中最大的为排序基准 如何实现?
- 把一个表的数据保存到另外一个表中,有没有什么高效的处理办法
- 求转换工具:可把ORALCE 9I中写的存储过程和函数可选择地自动倒入SQL SERVER 2000中,自动做相应的修改无须手动修改即可运行。
- 我在oracle中要用sql语句建一个表,但是有的列的数据要用前面的列数据运算获得,这个表怎么建?
- 查询一个用户下全部的列,用哪个系统表?马上给分
- 我在导出用户时出现下列错误,请问如何解决,EXP-00056: 遇到 ORACLE 错误 600
- 请问这个sql应该怎么写?(急,在线等!)
- 如何从多个文件中取数据并合并导到一个ORACLE表中
- Oracle 7的安装问题?
- 用什麼方法可以方便快捷的把數據庫從SqlSever中轉到Oracle上來.
- Delphi 在ODBC连接中,如何执行PL/SQL语句
CREATE OR REPLACE PACKAGE "PKG_LINBO" as
type myrctype is ref cursor;end pkg_linbo;CREATE OR REPLACE FUNCTION PROC_BADCHANGEUA(
in_unit IN NUMBER,
in_bianhao IN VARCHAR2,
in_timef IN DATE,
in_timet IN DATE,
in_datatype IN VARCHAR2)
RETURN PKG_LINBO.myrctypeAS
rc PKG_LINBO.myrctype;BEGIN OPEN rc FOR
SELECT rectime,badau * 100 AS badau
FROM tsum_his_alarm
WHERE rectime >= in_timef
and rectime <= in_timet
and unit = in_unit
and bianhao = in_bianhao
and alarm = 0;
RETURN rc;
END PROC_BADCHANGEUA;
AS
TYPE myrctype IS REF CURSOR; PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
END pkg_test;
/CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
IS
sqlstr VARCHAR2 (500);
BEGIN
IF p_id = 0 THEN
OPEN p_rc FOR
'SELECT ID, NAME, sex, address, postcode, birthday
FROM student';
ELSE
sqlstr :=
'select id,name,sex,address,postcode,birthday
from student where id=:w_id';
OPEN p_rc FOR sqlstr USING p_id;
END IF;
END get;
END pkg_test;
/
BEGIN
//这个里面怎么写?
END test;
/
AS
TYPE myrctype IS REF CURSOR;
END pkg_test;create or replace PROCEDURE get(p_id NUMBER, p_rc OUT pkg_test.myrctype)
IS
sqlstr VARCHAR2 (500);
BEGIN
sqlstr :='select id,name,sex,address,postcode,birthday
from student where id=:w_id';
OPEN p_rc FOR sqlstr USING p_id;
END get;
我要把数据放到临时表里,是为了要把这些数据作为Crystal Report报表的数据源。还能有什么其他的方法么?to beckhambobo(beckham) :
我参照写了一个,可是怎么调用它查看结果呢?
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR; PROCEDURE get ( p_rc OUT myrctype);
END pkg_test;
/PROCEDURE get ( p_rc OUT myrctype)
IS
BEGIN
OPEN p_rc FOR
'SELECT * FROM tbCityAreaPart';
END get;
END pkg_test;
/我在SQL/PL下调用的代码如下:
declare
cursor temp;
begin
exec pkg_test.get(temp);
end;
/可是还是报错了:
ERROR 位于第 4 行:
ORA-06550: 第 4 行, 第 8 列:
PLS-00103: 出现符号 "PKG_TEST"在需要下列之一时:
:=.(@%;
符号 ":=" 被替换为 "PKG_TEST" 后继续。
1、myrctype不是ORACLE内部对象,所以不直接引用,只能在包体名作前缀
2、在包头声明的对象,只能在包体中定义,过程get已脱离了修改以下:
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;END pkg_test;
/create or replace PROCEDURE get ( p_rc OUT pkg_test.myrctype)
IS
BEGIN
OPEN p_rc FOR
'SELECT * FROM tbCityAreaPart';
END get;
/
可还是出错了
我刚刚学习使用Oracle,谢谢帮忙看一下^_^SQL> declare
2 cursor temp;
3 begin
4 exec pkg_test.get(temp);
5 end;
6 /
exec pkg_test.get(temp);
*
ERROR 位于第 4 行:
ORA-06550: 第 4 行, 第 8 列:
PLS-00103: 出现符号 "PKG_TEST"在需要下列之一时:
:=.(@%;
符号 ":=" 被替换为 "PKG_TEST" 后继续。
SQL> declare
2 cursor temp;
3 begin
4 get(temp);
5 end;
6 /
cursor temp;
*
ERROR 位于第 2 行:
ORA-06550: 第 2 行, 第 2 列:
PLS-00360: 无主体的游标说明需要返回类型
ORA-06550: 第 2 行, 第 2 列:
PL/SQL: Item ignored
ORA-06550: 第 4 行, 第 6 列:
PLS-00320: 此表达式的类型说明不完整或格式不正确
ORA-06550: 第 4 行, 第 2 列:
PL/SQL: Statement ignored
我的报表数据源已经可以通过简单的存储过程绑定出来了^_^
虽然原理我还不是很明白为什么要把它写成包体呢?我可不可以直接定义一个返回游标型的out参数的存储过程?
但是create or replace PROCEDURE get ( p_rc OUT REF CURSOR)这样写,编译不过去,有这种方法么?
结贴给分了,呵呵