我需要在事务中连续调用 Oracle 包中的多个不同过程。事实上,我需要调用他们大约 5000 次。我想知道我可以使用什么语法来批处理这些对 Oracle 的调用,所以我只需要一次往返。我试过了
PACKAGE.PROCA :1, :2; PACKAGE.PROCB :3, :4, :5;
但我回来了 ORA00900:无效的 SQL 语句。
任何指针?我知道将参数数组传递给过程,但不幸的是,在这种情况下这并没有多大帮助。
最简单的是匿名 PL/SQL 块。例如:
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;
/
然后,您可以进行额外的步骤,将其实际创建为数据库中的过程,然后简单地调用该过程。PS。末尾的斜线告诉 SQL*Plus 或 SQL Developer 执行代码。这取决于您使用什么来运行 SQL。
并为每个呼叫产生一次网络往返?听起来就像是性能的死亡。重写存储过程可能会更好,这样您就可以减少网络流量。