2009-05-08 12 views
4

BLOBのサイズを人間が読める形式で取得するために、SQLクエリをどのように記述しますか?この例は、大きな単語の文書が表のBLOBに格納されているようなものです。私のような何かを実行したい:SQLを使用してOracle BLOB列に格納されたファイルの読取り可能な「ファイル・サイズ」を戻すエレガントな方法は何ですか?

select fnc_getReadableSize(documents.doc) from documents where id = ? 

出力: 23.4メガバイト

答えて

9

「読める」部分は、私がより強調されているべきものです。ここに私が今まとめたものがあります。

WITH file_sizes AS 
    (SELECT 1048576 MEGABYTE, 1024 KILOBYTE, 
      DBMS_LOB.GETLENGTH (BLOB_COLUMN) byte_size 
     FROM BLOB_COLUMN) 
SELECT (CASE TRUNC (byte_size/MEGABYTE) 
      WHEN 0 
       THEN TO_CHAR ((byte_size/KILOBYTE), '999,999') || ' KB' 
      ELSE TO_CHAR ((byte_size/MEGABYTE), '999,999.00') || ' MB' 
     END 
     ) display_size 
    FROM file_sizes 


Output: 

DISPLAY_SIZE 
-------------- 
     1.88 MB 
    433 KB 
    540 KB 
    333 KB 
     1.57 MB 
     1.17 MB 
+2

より簡単に/より多くのreadbaleは 'いつバイトサイズ<メガバイトTHEN'? – jpmc26

5
SELECT DBMS_LOB.GETLENGTH(COLUMN_NAME) FROM DOCUMENTS 
+0

「読みやすい」部分を強調する必要がありました。私はWITH句を使用して定数を確立した後、KBとMBのバリエーションが即時の1つのレポートの必要性に十分であると恣意的に判断しました。 –

+0

OPで尋ねられないが、OPで尋ねられないように、BFILEでも動作する可能性があります。 'select dbms_lob.getlength(bfilename( 'MYDIR'、 'oracle.png'))s from dual;' – lkuty

関連する問題