首页 > 解决方案 > 使用 cx_oracle 从 Oracle 10 的队列中出列消息

问题描述

我设置了一个名为“ORGS_QUEUE”的队列,当将记录插入表中时,使用触发器将消息排入队列。触发器工作正常,当我可以使用 sql 成功地将消息出列时。

现在我正在尝试使用 cx_Oracle 执行此操作,并且我正在使用以下代码:

def dequeue_data():
    TYPE_NAME = "MESSAGE_TYPE"
    QUEUE_NAME = "ORGS_QUEUE"
    connection = cx_Oracle.connect("TEST", '123', "localhost/xe")
    queue_type = connection.gettype(TYPE_NAME)
    queue = connection.queue(QUEUE_NAME, queue_type)
    queue.deqOptions.wait = cx_Oracle.DEQ_NO_WAIT
    queue.deqOptions.visibility = cx_Oracle.DEQ_IMMEDIATE
    msg = queue.deqOne()
    connection.commit()
    xref, data = msg.payload.XREF, msg.payload.REC_DATA
    print xref, data

在运行此代码时,我得到错误回溯:

Traceback (most recent call last):
  File "/home/user/dequeue_test.py", line 31, in <module>
    dequeue_data()
  File "/home/user/dequeue_test.py", line 13, in dequeue_data
    msg = queue.deqOne()
cx_Oracle.OperationalError: ORA-03113: end-of-file on communication channel
Process ID: 0
Session ID: 24 Serial number: 49

我在这里做错了什么?

标签: pythonoracle10gcx-oracleoracle-xe

解决方案


推荐阅读