我想创建一个过程,传入插入的数据,包括文件的目录和文件名(都是varchar2类型)。脚本如下:
reate or replace procedure insrt_auth (
            p_au_id         in   a_authors.au_id %type,
            p_pic_dir       in   varchar2,
            p_pic_name      in   varchar2)
as
        v_bfile      bfile;
        v_blob       blob;
        v_clob       clob;
begin
        insert into a_au_pix(au_id,pic) values(p_au_id,empty_blob());        create directory dir as p_pic_dir;
        select pic into v_blob from a_au_pix where au_id=p_au_id for update;
        v_bfile := bfilename('dir',p_pic_name);
        dbms_lob.fileopen(v_bfile,dbms_lob.file_readonly);
        dbms_lob.loadfromfile(v_blob,v_bfile);
        drop directory dir;end insrt_auth;可是我在过程中创建directory对象时老是出错:
create directory dir as p_pic_dir;
p_pic_dir是一输入参数,即文件目录的字符串,不知错误何在?show errors;的提示是:26行即这行:create directory dir as p_pic_dir;
LINE/COL ERROR
-------- -----------------------------------------------------------------
26/9     PLS-00103: 出现符号 "CREATE"在需要下列之一时:
         begin case declare end
         exception exit for goto if loop mod null pragma raise return
         select update while with <an identifier>
         <a double-quoted delimited-identifier> <a bind variable> <<
         close current delete fetch lock insert open rollback
         savepoint set sql execute commit forall merge
         <a single-quoted SQL string> pipe该问题如何解决是好啊,多谢各位指教!

解决方案 »

  1.   

    在plsql中不能直接执行ddl语句,得这样:execute immediate 'create directory dir as ' || p_pic_dir;
      

  2.   

    多谢,长本事了,呵呵!我用该过程插入数据:execute insrt_auth('001','F:\MyProjects\adb\pic','pic01.gif');
    即p_pic_dir='F:\MyProjects\adb\pic',执行时提示错误,错误指向这行
    execute immediate 'create directory dir as ' || p_pic_dir;
    错误描述为:ORA-01780: 要求文字字符串
    该如何是好?多谢!
      

  3.   

    上面的问题似乎是单引号的问题to  boydgmx(梦霄) :
        用execute immediate 'create directory dir as ' || p_pic_dir;后,我的 procedure 里不能用dir了啊,这样不是相当于没有创建目录吗?这个问题有办法解决吗?或者,还有其他达到同样目的的解决办法吗?谢谢!
      

  4.   

    execute immediate 'create directory dir as ''' || p_pic_dir || '''';可能存在的问题:大小写