2012-10-29 72 views
0

我試圖開發一種將讀取表的BLOB字段或寫入將被用作模板到另一個程序,但RTF文檔的程序時,程序會啓動這個選擇statemente ,我遇到了一個ORA-06502錯誤。錯誤ORA-06502的BLOB檢索

此錯誤,閱讀文檔後,被田野之間的不兼容性(數字或值錯誤字符串)

造成的,但我已經在互聯網上隨處可見這個例子,我跑出來的有什麼想法正在造成它。

我的程序的源代碼如下:

PROCEDURE p_transfer_db_client(pcPath IN VARCHAR2, 
           pnSequence IN NUMBER) IS 

    v_src_blob BLOB; 
    v_file UTL_FILE.FILE_TYPE; 
    v_offset INTEGER := 1; 
    v_amount BINARY_INTEGER := 32766; 
    v_binary_buffer RAW(32767); 

BEGIN 

    SELECT model 
    INTO v_src_blob 
    FROM models 
    wHERE id = pnSequence; 

    v_file := UTL_FILE.FOPEN(pcPath, 'model.rtf', 'wb', v_amount); 

    LOOP 
     BEGIN 
      DBMS_LOB.READ(v_src_blob, v_amount, v_offset, v_binary_buffer); 
      UTL_FILE.PUT_RAW(v_file, v_binary_buffer); 
      v_offset := v_offset + v_amount; 
     EXCEPTION 
      WHEN NO_DATA_FOUND THEN 
       EXIT; 
     END; 
    END LOOP; 

    UTL_FILE.FFLUSH(v_file); 
    UTL_FILE.FCLOSE(v_file); 

END p_transfer_db_client; 
+1

你能後的表的定義'models':

,如果你註釋掉所有變量聲明和下面的所有語句,即你仍然得到錯誤?特別是,你的'id'列是VARCHAR2嗎? –

+0

創建錶款 ( inst_num_instituicao NUMBER(2)不爲空, ID號(3)不爲空, 模型BLOB NOT NULL ) – lagranzotto

+1

的'ORA-06502'意味着你正在嘗試設置變量值比其最大值(例如,將VARCHAR2(2)設置爲'XXX')。哪一行確切地觸發了錯誤?在SELECT語句 –

回答

0

編輯:我沒有看到你有標記這個問題爲forms

您的代碼將不會在裏面工作形式:UTL_FILE和DBMS_LOB運行數據庫服務器上,而不是形式的客戶端,以便他們應該是一個PL/SQL程序,而不是一個表單程序英寸

我敢肯定的BLOB數據類型沒有在表格這樣的管理,其實我很驚訝它甚至編譯!

例如,看看這個example showing how to handle blobs inside forms,你會發現你需要在PLSQL過程中定義和查詢blob,而不是直接通過表單。

我建議你創建數據庫裏面的過程作爲PLSQL包,並從客戶端的形式調用這個包。


還有其他事情正在發生,我看不出爲什麼SELECT語句不起作用。

SQL> create table models (
    2  inst_num_instituicao NUMBER(2) not null, 
    3  id     NUMBER(3) not null, 
    4  model    BLOB not null); 

Table created. 

SQL> insert into models values (1, 1, hextoraw('FFFF')); 

1 row created. 

SQL> declare 
    2  b blob; 
    3 begin 
    4  select model into b from models where id = 1; 
    5 end; 
    6/

PL/SQL procedure successfully completed. 
+0

此過程在Oracle Forms 6i Form中使用...在PL/SQL Developer中我沒有得到任何錯誤 – lagranzotto

+0

在數據庫服務器上運行'UTL_FILE'和'DBMS_LOB',而不是表單客戶端,所以它們應該在一個PL/SQL過程,而不是一個Forms過程。我很確定BLOB數據類型不是在窗體中像這樣管理的。看一看[這個例子](http://fdegrelle.over-blog.com/article-2615079.html),你會發現你需要在PLSQL過程中定義和查詢blob,而不是直接通過表格。 –

+0

我已經達到了另一個解決這個問題,修改我如何獲取模板文件,現在直接從服務器上的文件服務器做的事情。但感謝所有的幫助:) – lagranzotto