Plsql PL/SQL在Oracle中等待更新

Plsql PL/SQL在Oracle中等待更新,plsql,wait,Plsql,Wait,如何创建PL/SQL函数,该函数在指定的超时时间内等待某行的更新,然后返回 我想完成的是-我有一个长时间运行的进程,它将根据进程id将其状态更新为异步进程表。我需要一个函数,该函数在该进程完成时返回true/false,但我还需要该函数等待一段时间,等待该进程完成,超时时返回或立即返回true,当流程完成时。我不想使用sleep1秒,因为在这种情况下,我将有1秒的延迟。我不想使用sleep1毫秒,因为在这种情况下,我要花费cpu资源和1毫秒的延迟 有经验的程序员如何实现这一点,有什么好办法吗 该

如何创建PL/SQL函数,该函数在指定的超时时间内等待某行的更新,然后返回

我想完成的是-我有一个长时间运行的进程,它将根据进程id将其状态更新为异步进程表。我需要一个函数,该函数在该进程完成时返回true/false,但我还需要该函数等待一段时间,等待该进程完成,超时时返回或立即返回true,当流程完成时。我不想使用sleep1秒,因为在这种情况下,我将有1秒的延迟。我不想使用sleep1毫秒,因为在这种情况下,我要花费cpu资源和1毫秒的延迟

有经验的程序员如何实现这一点,有什么好办法吗

该函数将从.NET调用,因此我需要DB操作和.NET/UI之间的最小延迟

THNX,
Beef

我认为在这种情况下,最明智的做法是在异步进程表上使用update

你也应该检查一下包裹。以下是该文件的编辑摘录:

创建警报:

DBMS_ALERT.REGISTER('emp_table_alert');
在表上创建触发器以触发警报:

CREATE TRIGGER emptrig AFTER INSERT ON emp
BEGIN 
   DBMS_ALERT.SIGNAL('emp_table_alert', 'message_text'); 
END;
从.net代码中,您可以使用以下内容:

DBMS_ALERT.WAITONE('emp_table_alert', :message, :status, :timeout); 

请务必阅读文档,了解:status和:timeout的作用。

我认为在这种情况下,最明智的做法是在该异步进程表上使用update

你也应该检查一下包裹。以下是该文件的编辑摘录:

创建警报:

DBMS_ALERT.REGISTER('emp_table_alert');
在表上创建触发器以触发警报:

CREATE TRIGGER emptrig AFTER INSERT ON emp
BEGIN 
   DBMS_ALERT.SIGNAL('emp_table_alert', 'message_text'); 
END;
从.net代码中,您可以使用以下内容:

DBMS_ALERT.WAITONE('emp_table_alert', :message, :status, :timeout); 
确保您阅读了文档中的内容:状态和超时操作。

您应该查看。它提供了您想要的功能

您可能需要一个单独的队列表,异步进程上的触发器在其中插入消息。然后使用AQ函数检索或等待队列表中的下一条消息。

您应该查看。它提供了您想要的功能


您可能需要一个单独的队列表,异步进程上的触发器在其中插入消息。然后使用AQ函数检索或等待队列表中的下一条消息。

如果在C.NET中执行此操作,为什么不直接生成一个工作线程来通过ODAC执行更新?当您似乎希望.NET进程在后台进行更新调用并通知主进程其完成时,为什么要将责任移交给Oracle呢


请参阅和以获取示例,尽管.NET中有几种方法可用于此操作—委托、事件、异步回调、线程池等,但如果您在C.NET中执行此操作,为什么不直接生成一个工作线程来通过ODAC执行更新呢?当您似乎希望.NET进程在后台进行更新调用并通知主进程其完成时,为什么要将责任移交给Oracle呢


请参阅和以获取示例,尽管.NET中有几种方法可用于此委托、事件、异步回调、线程池等,但我没有提到的是,我将从.NET中调用PL/SQL函数;然后编辑您的问题,以明确包括标记我没有提到的是,我将从.NET!调用PL/SQL函数;然后编辑您的问题,使之清楚,包括tagsWorker线程保持打开的DB连接。它可以阻止某些资源。应用程序在不中断DB呼叫的情况下无法关闭。@BEEF:您希望您的应用程序在等待更新时关闭吗?因此,您希望您的应用程序只是启动并忘记更新,然后稍后ping一些表,以查看其done?Worker线程是否保持打开的DB连接。它可以阻止某些资源。应用程序在不中断DB呼叫的情况下无法关闭。@BEEF:您希望您的应用程序在等待更新时关闭吗?所以,你想让你的应用程序只是启动并忘记更新,然后稍后ping一些表,看看它是否完成了?