为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:V8
【操作系统】:Windows
【CPU】:13600KF
【问题描述】*:
以下是对BASE64字符解码的方法:
CREATE OR REPLACE FUNCTION BASE64_DECODE(P_INPUT IN CLOB) RETURN NVARCHAR2 IS
L_OUTPUT NVARCHAR2(32767);
L_RAW RAW(32767);
BEGIN
IF P_INPUT IS NULL THEN RETURN NULL; END IF;
L_RAW := UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(P_INPUT));
L_OUTPUT := UTL_I18N.RAW_TO_NCHAR(L_RAW, 'AL32UTF8');
RETURN L_OUTPUT;
END;
我该怎么修改,让他可以在达梦数据库中适配呢?
这是在oracle环境下的执行结果
在dm环境下的执行结果
改成这样后不报错了,但是返回的都是空NULL
CREATE FUNCTION BASE64_DECODE(P_INPUT IN VARCHAR) RETURN VARCHAR IS
L_OUTPUT VARCHAR(32767);
L_RAW RAW(32767);
BEGIN
IF P_INPUT IS NULL THEN RETURN NULL; END IF;
L_RAW := UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(P_INPUT));
L_OUTPUT := UTL_I18N.RAW_TO_CHAR(L_RAW, 'AL32UTF8');
RETURN L_OUTPUT;
END;
L_OUTPUT := UTL_I18N.RAW_TO_CHAR(L_RAW, 'UTF8');
感谢上面2位兄弟的答复:以下是最终版
CREATE FUNCTION BASE64_DECODE(P_INPUT IN VARCHAR) RETURN VARCHAR IS
L_OUTPUT VARCHAR(32767);
L_RAW RAW(32767);
BEGIN
IF P_INPUT IS NULL THEN RETURN NULL; END IF;
L_RAW := UTL_ENCODE.BASE64_DECODE(UTL_RAW.CAST_TO_RAW(P_INPUT));
L_OUTPUT := UTL_I18N.RAW_TO_CHAR(L_RAW, 'UTF8');
RETURN L_OUTPUT;
END;
RAW_TO_NCHAR这个没有,改成 RAW_TO_CHAR吧