【发布时间】:2012-03-28 17:40:06
【问题描述】:
我对 PL-SQL 还是很陌生,尽管我对其他 RDBMS 有很多 db 经验。这是我当前的问题。
procedure CreateWorkUnit
is
update workunit
set workunitstatus = 2 --workunit loaded
where
SYSDATE between START_DATE and END_DATE
and workunitstatus = 1 --workunit created;
--commit here?
call loader; --loads records based on status, will have a commit of its own
update workunit wu
set workunititemcount = (select count(*) from workunititems wui where wui.wuid = wu.wuid)
where workunitstatus = 2
因此,无论有没有提交语句,我看到的行为是我必须执行两次。一旦翻转状态,加载程序将在第二次执行时运行。我想一口气跑完。
我会很感激任何预言智慧的话。
谢谢!
【问题讨论】:
-
所以您的问题在于您没有向我们展示的代码,即 LOADER 本身。出于某种原因,它没有反映工作状态的变化。原因有很多,如果没有看到代码,很难提出建议。
-
那么“call loader”到底是做什么的呢?
-
除了缺少的
loader,(a) 你的procedure CreateWorkUnit代码片段不清楚:它是在一个匿名块中,还是它前面有一个CREATE命令? (b) 你怎么知道CreateWorkUnit被执行了? (c) 它缺少END。
标签: sql oracle transactions plsql