Plsql Update语句在正常模式下工作,但在过程中不工作

Plsql Update语句在正常模式下工作,但在过程中不工作,plsql,oracle10g,oracle-sqldeveloper,Plsql,Oracle10g,Oracle Sqldeveloper,我想将图像从目录上传到数据库blob字段。出于这些原因,我编写了这段代码。代码本身可以很好地工作,但不能作为过程工作。 有什么问题?我不明白。代码如下: 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_lo

我想将图像从目录上传到数据库blob字段。出于这些原因,我编写了这段代码。代码本身可以很好地工作,但不能作为过程工作。 有什么问题?我不明白。代码如下:

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;
但是当我把这段代码作为一个过程来编写时

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;
打个电话

img_to_blob_student('123');
我明白了


要调用该过程,是否使用了
exec
语句

exec img_to_blob_student('123');

有一个问题,先生,我可以动态地使用表名和列名吗?嗨,阿里夫,当然可以,但这需要您进一步深入了解Oracle
所有表
立即执行*您构造的语句*
。这应该被广泛地解释在StackOverflow中。。。e、 g.创建、删除和更新在EXECUTE IMMEDIATE中起作用,但我可以如何在此处使用SELECT。您也可以在变量中选择某些内容。但这是一个完整的主题,我们不应该试图在对这个问题的评论中讨论它。
exec img_to_blob_student('123');