Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用管道oracle函数frm java类_Java_Oracle_Jdbc - Fatal编程技术网

调用管道oracle函数frm java类

调用管道oracle函数frm java类,java,oracle,jdbc,Java,Oracle,Jdbc,基本上我想做的是从我的java类中调用一个oracle管道函数。这个oracle函数只有一个out参数。如果您试图在PL/SQL中调用管道函数,即在SQL之外,您将得到一个错误PLS-00653:在PL/SQL范围内不允许使用聚合/表函数 如果您尝试在SQL中调用带有OUT参数的函数,您将得到一个错误ORA-06572:函数MYFUNC有OUT参数 所以,把这两个放在一起,如果你有一个带有OUT参数的流水线函数,你不能在SQL中调用它,也不能在SQL外部调用它。换句话说,你根本不能叫它。基本上,

基本上我想做的是从我的java类中调用一个oracle管道函数。这个oracle函数只有一个out参数。

如果您试图在PL/SQL中调用管道函数,即在SQL之外,您将得到一个错误
PLS-00653:在PL/SQL范围内不允许使用聚合/表函数

如果您尝试在SQL中调用带有
OUT
参数的函数,您将得到一个错误
ORA-06572:函数MYFUNC有OUT参数

所以,把这两个放在一起,如果你有一个带有
OUT
参数的流水线函数,你不能在SQL中调用它,也不能在SQL外部调用它。换句话说,你根本不能叫它。基本上,这是一个无用的函数。为什么Oracle允许您编译它是一个谜


您需要修改您的函数,使其(a)不是管道化的,或者(b)没有
OUT
参数。

在这里,我看不出有任何特殊需要使用CallableStatement对象从包函数中获取表数据。 相反,我们可以使用普通的sql查询来包装结果,并将其提取到普通的java结果集中。 这样做,我们避免了试图找到一个痛苦的解决方案来调整包函数(使用包级别类型),保持函数和包类型不变,并继续受益于使用管道化plsql函数未知的内部功能和速度。
Panos Zafiropoulos。

您能提供更多信息吗?我有一个oracle管道函数,它返回oracle集合。我需要java代码来调用这个管道函数并获取这个oracle collectionCallableStatement ftRPCaStmt=conn.prepareCall(“我的函数的开始名();结束;”);ftRPCaStmt.registerOutParameter(1,OracleTypes.ARRAY,MY_ORACLE_集合);System.out.println(“collection>>>>”+(ftRPCaStmt.getObject(1));这是我调用管道函数的代码。但我得到了下面的错误。“main”java.sql.SQLException:Invalid column index ftRPCaStmt.execute()@用户2500313:我一点也不奇怪你会犯这样的错误。您试图告诉JDBC CallableStatement中的第一个占位符(
)是out参数,但CallableStatement中没有任何占位符。此外,您是否按照我的建议重写了您的函数,或者您是否仍打算以某种方式调用您的函数,尽管实际上无法调用它?