建一张表,用它来存储XML文档.
1、建表:
create table TEST_XMLTYPE
(
  VAR XMLTYPE
);
2、建目录:
create or replace directory MYFILE
  as 'g:\file';
且保证g:\file下面有一个simple.xml文件。
3、创建存储过程
create or replace procedure prc_test_xmltype(p_path varchar2,p_file varchar2)
is
 v_file bfile;
 v_xml xmltype;
 v_clob clob;
begin
  v_clob:=empty_clob();
  v_file:=bfilename(p_path,p_file);
  dbms_lob.fileopen(v_file,dbms_lob.file_readonly);
  dbms_lob.loadfromfile(v_clob,v_file,dbms_lob.getlength(v_file));
  dbms_lob.fileclose(v_file);
  
  v_xml:=xmltype.createXML(v_clob);  
  insert into test_xmltype(var) values(v_xml);
  
  commit;
end prc_test_xmltype;
4、存储过程运行没有问题,但当我执行时,却报错了。
SQL> exec prc_test_xmltype;begin prc_test_xmltype; end;ORA-06550: 第 1 行, 第 7 列: 
PLS-00306: 调用 'PRC_TEST_XMLTYPE' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored请问是什么原因,帮忙解决一下。谢谢。

解决方案 »

  1.   

    参数有问题。请指定是IN还是OUT
      

  2.   

    修改后,好像还是会报错.
    SQL> exec prc_test_xmltype('MYFILE','SIMPLE.XML');begin prc_test_xmltype('MYFILE','SIMPLE.XML'); end;ORA-22275: 指定的 LOB 定位器无效
    ORA-06512: 在"SYS.DBMS_LOB", line 616
    ORA-06512: 在"TEST_VIEW.PRC_TEST_XMLTYPE", line 10
    ORA-06512: 在line 1这是什么原因?难不成存储过程有问题?
      

  3.   

    create or replace procedure utl_file_read as
    f utl_file.file_type;
    fp_buffer varchar2(4000);
    begin
    f := utl_file.fopen('DBDIR','hht.sql','R');
    utl_file.get_line(f,fp_buffer);
    --dbms_output.put_line(fp_buffer);
    INSERT INTO C VALUES(fp_buffer);
    --utl_file.get_line(f,fp_buffer);
    --INSERT INTO C VALUES(fp_buffer);
    --dbms_output.put_line(fp_buffer);
    utl_file.fclose(f);
    COMMIT;
    end;
      

  4.   

    CREATE OR REPLACE PROCEDURE eygle_load_blob (pfname VARCHAR2,pdesc varchar2) IS
        src_file BFILE;
        dst_file BLOB;
        lgh_file BINARY_INTEGER;
        BEGIN
           src_file := bfilename('DBDIR', pfname);
          INSERT INTO eygle_blob (fname,fdesc,fpic)
          VALUES ('hht.sql','sql',EMPTY_BLOB());
          RETURNING fpic INTO dst_file;
          
          SELECT fpic INTO dst_file
          FROM eygle_blob  WHERE fname = pfname FOR UPDATE;
     
          dbms_lob.fileopen(src_file, dbms_lob.file_readonly);
          lgh_file := dbms_lob.getlength(src_file);
          dbms_lob.loadfromfile(dst_file, src_file, lgh_file);
     
         UPDATE eygle_blob  SET fpic = dst_file;
         WHERE fname = pfname;
     
         dbms_lob.fileclose(src_file);
         
         commit;
    END;