当前位置: 首页 > 知识库问答 >
问题:

如何在Oracle10GR2中调用Java存储过程?

羿经武
2023-03-14
SET DEFINE OFF;

CREATE OR REPLACE AND COMPILE NOFORCE JAVA SOURCE NAMED "SCHEMA"."DigestUtils" AS
/* imports here... */

public class DigestUtils {

    private static final char[] hexCode = "0123456789ABCDEF".toCharArray();
    private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;

    public static String sha512Hex(Clob c) throws MyException {
        // Code here ...
        return "Hex.string.here";
    }

    private static class MyException extends Exception {
        private static final long serialVersionUID = 8501244872025707585L;

        public MyException(Throwable cause) {
            super(cause);

            if ((cause instanceof SQLException) && !(cause instanceof SQLWarning) && (DriverManager.getLogWriter() != null)) {
                printStackTrace(DriverManager.getLogWriter());
            }
        }
    }
}
;

CREATE OR REPLACE FUNCTION sha512Hex RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'DigestUtils.sha512Hex(java.sql.Clob) return java.lang.String';
select  clob_column, sha512Hex(clob_column)
from my_table
where id in (49917,49918,49919,60455)
ORA-06553: PLS-306: numéro ou types d'arguments erronés dans appel à 'sha512Hex'
06553. 00000 -  "PLS-%s: %s"
*Cause:    
*Action:
Error on line 196, column 17 (translated from original message)
(l. 196) select  clob_column, sha1Hex(clob_column)
                              ^
                              |___ column 17

共有1个答案

长孙雅志
2023-03-14

如果您描述您当前的功能,您将看到:

desc sha512Hex

Argument Name  Type     In/Out Default 
-------------- -------- ------ ------- 
<return value> VARCHAR2 OUT    unknown 

PL/SQL函数声明还需要定义参数及其类型:

CREATE OR REPLACE FUNCTION sha512Hex(c CLOB) RETURN VARCHAR2 AS
LANGUAGE JAVA NAME 'DigestUtils.sha512Hex(java.sql.Clob) return java.lang.String';

desc sha512Hex

Argument Name  Type     In/Out Default 
-------------- -------- ------ ------- 
<return value> VARCHAR2 OUT    unknown 
C              CLOB     IN     unknown 

然后你可以像在你的问题中尝试的那样调用它。

 类似资料:
  • 问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’

  • 问题内容: 我应该做的是创建一个Java存储过程,然后再从Java程序中调用它。 我在执行JAVA程序时遇到问题-带有1个参数的JDBCPiemers(如下)(我需要弄清楚String Nosaukums)。错误:“无效的列名”。 调用ORACLE中的过程可以正常工作。 这是我已存储在数据库中的存储过程。 我用oracle创建了以下程序包。 这是我在其中调用该过程的Java程序。但是我无法使它工作

  • 问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。

  • 问题内容: 我有一个存储过程,大约需要2-3分钟才能完成其执行。从ado.net我想使存储过程的执行在后台发生。一旦我向存储过程发出请求,我就必须返回到我的代码。谁可以帮我这个事 ? 问题答案: 您应该研究Threading。简而言之,您可以通过调用存储过程来创建线程。当您启动线程时,它将在beackground中运行。该线程可以具有在该线程完成时调用的回调函数。 BackgroundWorker

  • 问题内容: SQL Server2005支持CLR,所以这意味着我们可以在后端使用CLR,所以该怎么做。我在c#中有一些函数,它对日期时间变量进行了一些复杂的操作,现在我想在SP中使用这些函数。首先,可以这样做。 问题答案: 是的,可以在SQL Server 2005数据库中使用.NET。请注意,SQL Server 2005支持的.NET版本是2.0。 这是使用Visual Studio制作CL

  • 问题内容: 昨晚我刚刚开始学习hibernate,它相当有趣。我在使用hibernate将存储过程作为sql查询调用时遇到麻烦。我已附上来源和错误,请帮助我。谢谢 :) 这是Java文件::: 错误是::: 问题答案: 我基本上不使用hibernate的getNamedQuery重新设计输入,但是java.sql类可以正常工作!