我需要在事务中连续调用Oracle包中的许多不同过程。事实上,我需要打电话约5000次。我想知道我可以使用什么语法来批量调用Oracle,所以我只需要一次往返。我试过了
PACKAGE.PROCA :1, :2; PACKAGE.PROCB :3, :4, :5;
但是我回来了ORA00900:无效的SQL语句。
任何指针?我知道将参数数组传递给过程,但不幸的是,在这种情况下这无济于事。
答案 0 :(得分: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。
答案 1 :(得分:0)
每次通话都要进行网络往返?听起来像死亡表演。可能最好重写存储过程,以便减少网络流量。