我需要在一个事务中连续调用Oracle包中的多个不同过程。事实上,我需要给他们打电话5000次。我想知道我可以用什么语法将这些调用批量加入Oracle,所以我只需要一次往返。我试过Oracle:批量调用多个过程
PACKAGE.PROCA :1, :2; PACKAGE.PROCB :3, :4, :5;
但是我找回了ORA00900:无效的SQL语句。
任何指针?我知道将参数数组传递给过程,但在这种情况下不会有太大帮助。
我需要在一个事务中连续调用Oracle包中的多个不同过程。事实上,我需要给他们打电话5000次。我想知道我可以用什么语法将这些调用批量加入Oracle,所以我只需要一次往返。我试过Oracle:批量调用多个过程
PACKAGE.PROCA :1, :2; PACKAGE.PROCB :3, :4, :5;
但是我找回了ORA00900:无效的SQL语句。
任何指针?我知道将参数数组传递给过程,但在这种情况下不会有太大帮助。
最简单的是一个匿名的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。
并为每个呼叫进行网络往返?听起来像死亡的表现。重写存储过程可能会更好,这样可以减少网络流量。
不,我想批量他们进行一次往返。 – 2009-05-28 22:04:06