可以在两个不同的过程中存在两个具有相同名称的游标吗?

时间:2016-10-14 07:28:03

标签: database oracle proc

可以在两个不同的过程中存在两个具有相同名称的游标吗?

我们假设我有一个二进制alert_sender,它使用cusror名称GET_ALERT_CURSOR从数据库中获取数据,并且在另一个关闭警报的二进制alert_closer中存在相同的游标名称。

这两个二进制文件将在同一台机器上运行并连接到同一个数据库。

这有什么问题吗?

我在这个过程中遇到这样的错误。

H_ALERT_PROCESSOR:ERROR_LEVEL:2016/10/04 05:10:55:错误打开H_CURSOR: ORA-00604:递归SQL级别1发生错误

ORA-01000:最大 |时间增量:0.003 |总计:0.017 | (file / line = HAlertDataPuller.PC:176)

H_ALERT_PROCESSOR:ERROR_LEVEL:2016/10/04 05:25:55:错误打开H_CURSOR: ORA-01003:未解析语句

H_ALERT_PROCESSOR:ERROR_LEVEL:2016/10/04 05:40:55:错误打开H_CURSOR:ORA-01003:没有解析语句

H_ALERT_PROCESSOR:ERROR_LEVEL:2016/10/04 05:55:55:错误打开H_CURSOR:ORA-01003:未解析语句

H_ALERT_PROCESSOR:ERROR_LEVEL:2016/10/04 06:10:55:错误打开H_CURSOR:ORA-01003:未解析语句

2 个答案:

答案 0 :(得分:1)

Yes他们可以exist,但如果他们在same time运行则会出现问题。

让我们考虑你的例子:

当您的进程alert_sender启动并打开游标GET_ALERT_CURSOR时,这意味着它在缓冲区中保持活动状态,直到进行sql处理。 同时你的第二个进程alert_closer启动了,它也试图打开一个同名GET_ALERT_CURSOR的游标,因此游标的早期定义仍然保持活动状态和SQL引擎 发现它已经打开并抛出错误,如

  

ORA-06511 - 光标已经打开。

包含您之前的光标完成&光标未关闭,其他光标开始

  

ora-01000超出最大打开游标数

等等。

答案 1 :(得分:0)

应该没有问题,就像在不同的方法中定义相同的局部变量,它们可以在同一台机器上运行,也可以在同一个应用程序中运行。