更新时间:2022-12-17 23:22:49
解决方案
鉴于我长期以来遇到的许多问题,我决定创建一个 像这样的表:
given the many problems i had with long raw i decide to create a table like this:
CREATE TABLE FOTS_EMPL ( cod_empr, cod_empl, foto)
AS
SELECT F.COD_EMPR, F.COD_EMPL, TO_LOB (FOT_EMPL)
FROM FOEMP f;
CREATE TABLE FOTS_EMPL ( cod_empr, cod_empl, foto)
AS
SELECT F.COD_EMPR, F.COD_EMPL, TO_LOB (FOT_EMPL)
FROM FOEMP f;
我接受了@tbone给定的功能,并添加了if条件 像这样:
i took the function given by @tbone and i added and if condition like this:
CREATE OR REPLACE FUNCTION base64enc (p_blob IN BLOB)
RETURN CLOB
AS
l_clob CLOB;
l_step PLS_INTEGER := 1998;
BEGIN
IF p_blob IS NOT NULL
THEN
FOR i IN 0 .. TRUNC ( (DBMS_LOB.getlength (p_blob) - 1) / l_step)
LOOP
l_clob :=
l_clob
|| UTL_RAW.cast_to_varchar2 (
UTL_ENCODE.base64_encode (
DBMS_LOB.SUBSTR (p_blob, l_step, i * l_step + 1)));
END LOOP;
RETURN l_clob;
ELSE
RETURN NULL;
END IF;
END base64enc;
CREATE OR REPLACE FUNCTION base64enc (p_blob IN BLOB)
RETURN CLOB
AS
l_clob CLOB;
l_step PLS_INTEGER := 1998;
BEGIN
IF p_blob IS NOT NULL
THEN
FOR i IN 0 .. TRUNC ( (DBMS_LOB.getlength (p_blob) - 1) / l_step)
LOOP
l_clob :=
l_clob
|| UTL_RAW.cast_to_varchar2 (
UTL_ENCODE.base64_encode (
DBMS_LOB.SUBSTR (p_blob, l_step, i * l_step + 1)));
END LOOP;
RETURN l_clob;
ELSE
RETURN NULL;
END IF;
END base64enc;
这是我最后的选择语句:
this was my final select statement:
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,
base64enc(foto) 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 FOTS_EMPL F -- new table with blob instead of long raw
ON e.cod_empl = F.COD_EMPL AND e.cod_empr = f.cod_empr
WHERE C.IND_ACTI = 'A';
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,
base64enc(foto) 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 FOTS_EMPL F -- new table with blob instead of long raw
ON e.cod_empl = F.COD_EMPL AND e.cod_empr = f.cod_empr
WHERE C.IND_ACTI = 'A';
非常感谢您.