2016-03-24 8 views
1

Ich möchte Bild aus dem Verzeichnis in Datenbank Blob-Feld hochladen. Aus diesem Grund schreibe ich diesen Code. Code allein funktioniert gut, funktioniert aber nicht als Prozedur. Was ist das Problem? Ich kann nicht verstehen. Hier ist der Code:Update-Anweisung funktioniert im normalen Modus, aber nicht in der Prozedur

DECLARE 
    dest_loc BLOB; 
    src_loc BFILE; 
BEGIN 
    src_loc:= BFILENAME('ALL_IMG_DIR','SDFGASDF1544.jpg'); 
    DBMS_LOB.FILEOPEN(src_loc); 
    DBMS_LOB.CREATETEMPORARY(dest_loc,true); 
    DBMS_LOB.LOADFROMFILE(dest_lob => dest_loc, src_lob => src_loc,amount=>dbms_lob.getlength(src_loc)); 

    UPDATE STUDENT  
    SET IMAGE=dest_loc  
    WHERE 
    REG_CODE = 'SDFGASDF1544';   
    DBMS_LOB.CLOSE(src_loc);  
end; 

Aber wenn ich schreibe diesen Code als ein Verfahren, wie

CREATE OR REPLACE PROCEDURE img_to_blob_student(Vreg_code varchar2) 
is 
    dest_loc BLOB; 
    src_loc BFILE; 
BEGIN    
    src_loc := BFILENAME('ALL_IMG_DIR','SDFGASDF1544.jpg');  
    DBMS_LOB.FILEOPEN(src_loc);  
    DBMS_LOB.CREATETEMPORARY(dest_loc,true);  
    DBMS_LOB.LOADFROMFILE(
    dest_lob => dest_loc, 
    src_lob => src_loc, 
    amount=>dbms_lob.getlength(src_loc) 
); 
    UPDATE STUDENT 
    SET IMAGE=dest_loc  
    WHERE REG_CODE = 'SDFGASDF1544';   
    DBMS_LOB.CLOSE(src_loc);   
end; 

Und nennen wie

img_to_blob_student('123'); 

I

ERROR IS: `ORA-00900: invalid SQL statement in procedure` 

Antwort

1

bekommen Rufen Sie das Verfahren an, haben Sie dieverwendetAussage?

exec img_to_blob_student('123'); 
+0

Danke ich habe versucht und du hast Recht. – Arif

+0

Eine Frage Herr, kann ich Tabellenname und Spaltenname dynamisch verwenden? – Arif

+0

Hallo Arif, natürlich können Sie, aber es wird erfordern Sie ein wenig mehr in Oracle 'ALL TABLES' und die' EXECUTE IMMEDIATE * Ihre konstruierte Anweisung * 'zu graben. Dies sollte ausführlich erklärt werden, wie hier in StackOverflow ... z. [hier] (http://stackoverflow.com/questions/1241611/oracle-batching-ddl-statements-within-a-execute-immediate) –

Verwandte Themen