3

私はこのようなSQL文を持っています -

select utl_encode.utl_encode.base64_encode(IMAGE1) 
from IPHONE.accidentreports 
where "key" = 66

しかし、実行すると、このエラーが発生します-

ORA-00904: "UTL_ENCODE"."UTL_ENCODE"."BASE64_ENCODE": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 2 Column: 8

BLOBオブジェクトをに変換したいBASE64。どうすればそれができますか?

4

2 に答える 2

5

UTL_ENCODE.BASE64_ENCODE関数はRAW で機能するため、SQLで 32767 バイトPL/SQLまたは 4000 バイトまでの BLOB で機能します。

画像がこれよりも大きい場合は、独自の関数を作成する必要があります。次に例を示します。

CREATE OR REPLACE FUNCTION base64_encode_blob (p BLOB) RETURN BLOB IS
   l_raw    RAW(24573);
   l_base64 RAW(32767);
   l_result BLOB;
   l_offset NUMBER := 1;
   l_amount NUMBER := 24573;
BEGIN
   DBMS_LOB.createtemporary(l_result, FALSE);
   DBMS_LOB.open(l_result, DBMS_LOB.lob_readwrite);
   LOOP
      DBMS_LOB.read(p, l_amount, l_offset, l_raw);
      l_offset := l_offset + l_amount;
      l_base64 := utl_encode.base64_encode(l_raw);
      DBMS_LOB.writeappend(l_result, utl_raw.length(l_base64), l_base64);
   END LOOP;
EXCEPTION
   WHEN NO_DATA_FOUND THEN
      RETURN l_result;
END;
/
于 2012-10-09T14:48:33.970 に答える
0

まずUTL_ENCODE.BASE64_ENCODE、値のバイナリ表現でRAW機能し、関数は次のようになります。

UTL_ENCODE.BASE64_ENCODE (
   r  IN RAW) 
RETURN RAW;

したがって、検討IMAGE1するのは次のRAWタイプです。

SELECT UTL_ENCODE.BASE64_ENCODE(CAST(IMAGE1 AS RAW))  --if IMAGE1 is LOB
  FROM IPHONE.accidentreports 
 WHERE "key" = 66;

詳細については、こちらをCASTご覧ください

于 2012-10-09T14:04:37.333 に答える