程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了DB2:未找到具有兼容参数的类型为“FUNCTION”的名为“EBCDIC_CHR”的授权例程大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决DB2:未找到具有兼容参数的类型为“FUNCTION”的名为“EBCDIC_CHR”的授权例程?

开发过程中遇到DB2:未找到具有兼容参数的类型为“FUNCTION”的名为“EBCDIC_CHR”的授权例程的问题如何解决?下面主要结合日常开发的经验,给出你关于DB2:未找到具有兼容参数的类型为“FUNCTION”的名为“EBCDIC_CHR”的授权例程的解决方法建议,希望对你解决DB2:未找到具有兼容参数的类型为“FUNCTION”的名为“EBCDIC_CHR”的授权例程有所启发或帮助;

在DB2中尝试创建定义的函数将hex转为字符串时,遇到如下问题:

sql ERROR[42884]: No authorized routine named "EBCDIC_CHR" of type "FUNCTION" having compatible arguments was found..sqlCODE=-440,sqlSTATE=42884,DRIVER=4.19.66

具体代码如下:

CREATE FUNCTION My_HEX2EBCDIC (I_STRING VARCHAR(50)) RETURNS VARCHAR(50)
 
BEGIN
DECLARE v_hex1 char(1);
DECLARE v_hex2 char(1);
DECLARE v_int INTEGER;
DECLARE v_start INTEGER;
DECLARE v_string varchar(50);

SET v_start = 1;
SET v_string = '';

WHILE v_start < length(I_string) DO
  SET v_hex1 = substr(i_string,v_start,1);
  SET v_hex2 = substr(i_string,v_start+1,1);
  SET v_int = (locate(v_hex1,'0123456789ABCDEF') - 1 ) * 16 + locate(v_hex2,'0123456789ABCDEF') - 1 ;
  set v_string = v_string || EBCDIC_CHR(v_int);  // error
  SET v_Start = v_Start + 2;
END WHILE;
return v_String;
END

我不知道为什么,我该如何解决! 请帮帮我,谢谢!

解决方法

Db2 for LUW EBCDIC_CHR 中没有 DB2 for Z/OS scalar functions 这样的功能。
DB2 for Z/OS 和 DB2 for LUW 是不同的产品,它们的内置函数集略有不同。

解决实现目标的最简单方法是创建一个通用的 Java UDF。

public class Convert 
{
  public static byte[] char2byte(String str,String enc) throws java.io.UnsupportedEncodingException 
  {
    return str.getBytes(enc);
  }

  public static String byte2char(byte[] b,String enc) throws java.io.UnsupportedEncodingException 
  {
    return new String(b,enc);
  }
}

使用以下内容编译Convert.java文件并将Convert.class文件放到~db2instance/sqllib/function目录下,使其对~db2instance/sqllib/adm/.fenced文件所有者(db2受保护用户)可读.

使用这个类创建几个java UDF:

create function byte2char(bytes varchar(32672) for bit data,enc varchar(16))
RETURNS varchar(32672)
LANGUAGE JAVA
EXTERNAL NAME 'Convert.byte2char'
DETERMINISTIC
FENCED THREADSAFE
NO SQL
NOT NULL CALL
NO EXTERNAL ACTION
ALLOW PARALLEL
PARAMETER STYLE JAVA;

create function char2byte(str varchar(32672),enc varchar(16))
RETURNS varchar(32672) for bit data
LANGUAGE JAVA
EXTERNAL NAME 'Convert.char2byte'
DETERMINISTIC
FENCED THREADSAFE
NO SQL
NOT NULL CALL
NO EXTERNAL ACTION
ALLOW PARALLEL
PARAMETER STYLE JAVA;

似乎,您提供的十六进制字符串表示是针对 1381、1383 或 1386 代码页之一?
如果是,那么试试这个:

VALUES BYTE2CHAR(HEXTORAW('D6A7B8B6503031'),'IBM-1381')

大佬总结

以上是大佬教程为你收集整理的DB2:未找到具有兼容参数的类型为“FUNCTION”的名为“EBCDIC_CHR”的授权例程全部内容,希望文章能够帮你解决DB2:未找到具有兼容参数的类型为“FUNCTION”的名为“EBCDIC_CHR”的授权例程所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: