2009-05-08 2 views
4

Как бы вы написали SQL-запрос, чтобы получить размер blob в более удобочитаемой форме? Примером может быть что-то вроде большого слова документа, хранящегося в блобе на таблице. Я хотел бы, чтобы выполнить что-то вроде:Что такое элегантный способ возврата читаемого «размера файла» файла, хранящегося в столбце blob oracle, используя SQL?

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

выхода: 23,4 MB

ответ

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

Не так ли? easy/more readbale делать 'WHEN byte_size jpmc26

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

Я должен был подчеркнуть «читаемую» часть. Я закончил использование предложения WITH, чтобы установить мои константы, а затем произвольно решил, что варианты KB и MB будут достаточными для моего немедленного отчета. –

+0

В качестве дополнительного, но не заданного OP, он также может работать с BFILE: 'select dbms_lob.getlength (bfilename ('MYDIR', 'oracle.png')) s from dual;' – lkuty