可以在两个不同的过程中存在两个具有相同名称的游标吗?
我们假设我有一个二进制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:未解析语句
答案 0 :(得分:1)
Yes
他们可以exist
,但如果他们在same time
运行则会出现问题。
让我们考虑你的例子:
当您的进程alert_sender
启动并打开游标GET_ALERT_CURSOR
时,这意味着它在缓冲区中保持活动状态,直到进行sql处理。
同时你的第二个进程alert_closer
启动了,它也试图打开一个同名GET_ALERT_CURSOR
的游标,因此游标的早期定义仍然保持活动状态和SQL引擎
发现它已经打开并抛出错误,如
ORA-06511 - 光标已经打开。
包含您之前的光标完成&光标未关闭,其他光标开始
ora-01000超出最大打开游标数
等等。
答案 1 :(得分:0)
应该没有问题,就像在不同的方法中定义相同的局部变量,它们可以在同一台机器上运行,也可以在同一个应用程序中运行。