【问题标题】:Call Java Function from Oracle function从 Oracle 函数调用 Java 函数
【发布时间】:2018-06-14 04:24:46
【问题描述】:

我在 Oracle 中创建了 Java 类,但不知道如何创建函数来返回值。任何帮助,将不胜感激。

create or replace and compile java source named "ErrorMessage" 
as 
 import java.util.zip.Inflater;
 public class ErrorMessage {
    public static String uncompressMessage(byte[] cdata, int        uncompressedLength){
        String uncompData2 = null;
         try{

            Inflater inflater = new Inflater();
            inflater.setInput(cdata);
            Byte [] uncompData = new byte[uncompressedLength];
            int n = inflater.inflate(uncompData);
      uncompData2 = uncompData.toString();
            inflater.end();

        }catch (Exception e){
            e.getMessage();
        }
        return uncompData2;
    }
}

create or replace 
function getErrorMessage(msgdata blob, msgdatalength integer)
return varchar2
as language java
name 'ErrorMessage.uncompressMessage(byte[],int)
return java.lang.String';

【问题讨论】:

  • 您的数据类型不匹配 - 如果您传递的是 BLOB,则参数的数据类型应为 oracle.sql.BLOB 而不是 byte[]

标签: java oracle stored-procedures


【解决方案1】:

类似:

create or replace and compile java source named "ErrorMessage" 
as 
  import java.util.zip.Inflater;
  import java.lang.Byte;
  import java.sql.Blob;

  public class ErrorMessage {
    public static String uncompressMessage( Blob data, int uncompressedLength ){
      String uncompData2 = null;
      try{
        final long size = data.length();
        final byte[] cdata = data.getBytes( 0L, (int) size );
        Inflater inflater = new Inflater();
        inflater.setInput( cdata );
        byte[] uncompData = new byte[uncompressedLength];
        int n = inflater.inflate(uncompData);
        uncompData2 = new String( uncompData, "UTF-8" );
        inflater.end();
      }catch (Exception e){
        e.getMessage();
      }
      return uncompData2;
    }
}
/

create or replace function getErrorMessage(msgdata blob, msgdatalength number) return varchar2
as language java
name 'ErrorMessage.uncompressMessage(java.sql.Blob,int) return java.lang.String';

【讨论】:

  • 非常感谢您的快速响应。当我运行 select 语句时,它返回 NULL 而不是 uncompressmessage。我可以看到消息的长度。有什么建议吗?
  • 从表中选择getErrorMessage(msgdata,msglength)
猜你喜欢
  • 2012-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 2018-02-03
相关资源
最近更新 更多