2009-05-28 73 views
1

我需要在一个事务中连续调用Oracle包中的多个不同过程。事实上,我需要给他们打电话5000次。我想知道我可以用什么语法将这些调用批量加入Oracle,所以我只需要一次往返。我试过Oracle:批量调用多个过程

PACKAGE.PROCA :1, :2; PACKAGE.PROCB :3, :4, :5; 

但是我找回了ORA00900:无效的SQL语句。

任何指针?我知道将参数数组传递给过程,但在这种情况下不会有太大帮助。

回答

2

最简单的是一个匿名的PL/SQL块。 EG:

DECLARE 
    v_file_loc varchar2(100) := '....'; 
    v_file_name varchar2(100) := '....'; 
    v_text varchar2(4000); 
BEGIN 
    dbms_output.put_line('Starting file read'); 
    fp := UTL_FILE.FOPEN(v_file_loc,v_file_name,'r'); 
    LOOP 
     utl_file.GET_LINE(fp,v_text); 
     dbms_output.put_line(v_text); 
    END LOOP; 
    UTL_FILE.FCLOSE(fp); 
END; 
/

然后你可以去额外的步骤,实际上创造出这是DB的程序,然后简单的过程。 PS。最后的斜杠告诉SQL * Plus或SQL Developer执行代码。这取决于您使用什么来运行SQL。

0

并为每个呼叫进行网络往返?听起来像死亡的表现。重写存储过程可能会更好,这样可以减少网络流量。

+0

不,我想批量他们进行一次往返。 – 2009-05-28 22:04:06