【发布时间】:2015-07-03 10:32:07
【问题描述】:
这是我的第一个问题
我在尝试将表列(long raw)转换为 base 64 字符串时遇到问题,此列包含一些员工图片。
这是查询,我要转换的字段是 f.fot_empl:
SELECT e.NOM_EMPL First_name,
APE_EMPL Last_name,
e.NOM_EMPL || ' ' || e.APE_EMPL Full_name,
car.NOM_CARG position,
COS.NOM_CCOS Area,
f.fot_empl Picture,
E.FEC_NACI Birth_date
FROM EMPLE e
INNER JOIN CONTR c
ON E.COD_EMPL = C.COD_EMPL
INNER JOIN cargo car
ON C.COD_CARG = CAR.COD_CARG
INNER JOIN CCOST cos
on COS.COD_CCOS = C.COD_CCOS
LEFT JOIN FOEMP f -- employee picture
ON e.cod_empl = F.COD_EMPL
WHERE C.IND_ACTI = 'A';
我尝试过的:
这篇文章的已接受答案没有结果,我不断收到“非法使用 LONG 数据类型”错误。 Workaround for ORA-00997: illegal use of LONG datatype
我尝试实现以下功能但没有结果:
CREATE OR REPLACE FUNCTION to_base64 (
vcodem IN FOEMP.COD_EMPR%TYPE,
vcodempl IN FOEMP.COD_EMPL%TYPE)
RETURN VARCHAR2
IS
V_VAR FOEMP.FOT_EMPL%TYPE;
V_result VARCHAR2 (4000);
BEGIN
DBMS_OUTPUT.put_line ('Start');
SELECT UTL_RAW.cast_to_varchar2 (
UTL_ENCODE.base64_encode (
UTL_RAW.cast_to_raw (DBMS_LOB.SUBSTR (f.FOT_EMPL, 4000))))
INTO V_result
FROM FOEMP f
WHERE COD_EMPL = vcodempl AND COD_EMPR = vcodem;
DBMS_OUTPUT.put_line ('End');
DBMS_OUTPUT.put_line ('Result: ' || V_result);
END to_base64;
/
由于ORA-00997,函数无效:
SELECT UTL_RAW.cast_to_varchar2 (
UTL_ENCODE.base64_encode (
UTL_RAW.cast_to_raw (DBMS_LOB.SUBSTR (f.FOT_EMPL, 4000))))
INTO V_result
FROM FOEMP f
WHERE COD_EMPL = vcodempl AND COD_EMPR = vcodem;
非常感谢。
【问题讨论】:
-
如果 f.fot_empl 是 long_Raw,你为什么要对它使用 dbms_lob.substr? (首先需要是一个吊球)