我们之前做报表是连接的SQL Server的存储过程。先数据库迁移到oracle。再去刷新存储过程时,会报错:语法错误或违反访问规则,如图所示。
我怀疑是因为调用SQL Server和调用Oracle的存储过程的规则不同。
请问各位大侠,水晶报表可以调用Oracle的存储过程吗?目前是可以建立与Oracle的连接的,就是建立数据库专家时,输入入参后,点击确定就出错误了。
存储过程的参数中有两个出参,都是游标类型,带出结果集的。
希望大家能给点意见。谢谢!
------解决方案--------------------
水晶报表中调用ORACLE存储过程有讲究,不是随便写一个在数据库中可以运行的存储过程就行的,一般有两种写法,一种是定义包,还有一种是直接写存储过程,实例:
CREATE OR REPLACE PROCEDURE emp_test(cur IN OUT Sys_Refcursor,p_deptno IN emp.deptno%TYPE)
AS
BEGIN
OPEN cur FOR
SELECT empno,ename,job FROM emp WHERE deptno=p_deptno;
END;
看到有什么不同没,存储过程的参数中要有一个Sys_Refcursor类型的参数,这个类型是系统自带,直接可以使用。