我写了一个小程序如下:
PROCEDURE write_ToPipe ( i_key1 VARCHAR2,
i_value1 VARCHAR2,
i_key2 VARCHAR2,
i_value2 VARCHAR2,
i_key3 VARCHAR2,
i_value3 VARCHAR2,
i_key4 VARCHAR2,
i_value4 VARCHAR2,
i_key5 VARCHAR2,
i_value5 VARCHAR2 )
IS
result INTEGER;
buffer_overflow EXCEPTION;
PRAGMA EXCEPTION_INIT(buffer_overflow, -06558);
BEGIN
-- Packing the key value paires to the local buffer
dbms_pipe.pack_message(i_key1);
dbms_pipe.pack_message(i_value1);
dbms_pipe.pack_message(i_key2);
dbms_pipe.pack_message(i_value2);
dbms_pipe.pack_message(i_key3);
dbms_pipe.pack_message(i_value3);
dbms_pipe.pack_message(i_key4);
dbms_pipe.pack_message(i_value4);
dbms_pipe.pack_message(i_key5);
dbms_pipe.pack_message(i_value5);
-- sending the message to the pipe
result := dbms_pipe.send_message(pipename => 'DB_PIPE',timeout => 5);
EXCEPTION
WHEN buffer_overflow THEN
-- If the buffer overflow excetion reset the local buffer and pack the messages again
dbms_pipe.reset_buffer;
dbms_pipe.pack_message(i_key1);
dbms_pipe.pack_message(i_value1);
dbms_pipe.pack_message(i_key2);
dbms_pipe.pack_message(i_value2);
dbms_pipe.pack_message(i_key3);
dbms_pipe.pack_message(i_value3);
dbms_pipe.pack_message(i_key4);
dbms_pipe.pack_message(i_value4);
dbms_pipe.pack_message(i_key5);
dbms_pipe.pack_message(i_value5);
-- sending the message to the pipe
result := dbms_pipe.send_message(pipename => 'DB_PIPE',timeout => 5);
END write_ToPipe;
我将此过程称为其他过程(如下所示)。
proc A
begin
write_ToPipe( 'TEST1','TEST2', 'TEST3','TEST4','TEST5','TEST6','TEST7','TEST8','TEST9','TEST10',);
proc B;
end
proc b
begin
write_ToPipe( 'SOMETEST1','SOMETEST2', 'SOMETEST3','SOMETEST4','SOMETEST5','SOMETEST6',NULL,NULL,NULL,nULL);
end
我编写了另一个过程来解压消息并写入平面文件(此处未显示)
问题是来自 proc A 的内容正在生成到平面文件中,但不是来自 proc B 的内容 调试后,我发现从 proc B 调用了 write_ToPipe,但控制出来后没有在下一行之后抛出任何异常。 dbms_pipe.pack_message(i_key1);
你能帮忙解决这个问题吗?
我使用的是 Oracle 10gR2。
感谢和问候,
钱德拉
最佳答案
这可能是 Oracle 10g 的问题。请咨询 Oracle 支持人员了解这一点。 您也可以在 11g 或 12c 中尝试相同的程序
关于Oracle DBMS_PIPE 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51962261/