Oracle DBMS_PIPE 无法正常工作

标签 oracle plsql

我写了一个小程序如下:

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/

相关文章:

java - 使用 java 获取用参数替换的 SQL 字符串

java - #Resolved - 查询//存储函数调用中不存在位置参数

json - Oracle 12c JSON 查询与点表示法和双引号的问题

sql - 如何将空表的 MAX() 视为 0 而不是 NULL

oracle - Oracle中存储过程的object_id存储在哪里?

mysql - 使用另一个表数据更新表行

oracle - 如何创建唯一约束

java - Oracle pl/SQL 数字或值错误

oracle - Oracle异常处理-这正确吗?

sql - 更新查询的问题