【问题标题】:execute procedures from column in table从表中的列执行程序
【发布时间】:2017-09-22 14:11:03
【问题描述】:

请帮助我在 ORACLE 中执行程序。

我有 3 列的表格:

Create table PG_TABLE_1 
(ID number(3),
PROCEDURE varchar2(15),
STATUS varchar2(4));

insert into PG_TABLE_1 values ('1','PROC_1','OK');
insert into PG_TABLE_1 values ('2','PROC_2','WAIT');
insert into PG_TABLE_1 values ('3','PROC_3','WAIT');
insert into PG_TABLE_1 values ('4','PROC_4','WAIT');

PROC_1、PROC_2、PROC_3、PROC_4 是实际过程的名称。

如何使用 LOOP 编写代码,其中:

  • 从 TABLE_1 获取行,其中 STATUS='WAIT' ... 所以行 2,3,4
  • 选择过程的名字(第一个较小的 id)...所以“PROC_2”
  • 执行 PROC_2
  • 将第 2 行的状态从“WAIT”更改为“OK”
  • 然后是 PROC_3 等

感谢您的帮助

【问题讨论】:

  • 您将不得不使用动态 SQL 来构造执行语句。将它放在一个while循环中以迭代表中的行。哦,顺便说一句,整个事情都是一个糟糕的主意。
  • 您是否有任何理由不使用 Oracle 调度程序和链来完成所有这些工作?每个步骤都依赖于上一步执行的链将以易于支持的方式执行相同的操作。您还可以免费获得所有日志。
  • 这只是我的想法,因为当我将有 30 个程序并且每个程序将在另一天或一小时内执行时,我认为调度程序不是一个好主意(或者我错了?) .我有每天执行的程序,接下来是在每个星期一或星期二执行,或者..每月的第一天,每月的第一个工作日和季度的第 5 个工作日等。我的想法是我希望每天只生成程序将在这一天(PG_TABLE_1)执行,然后执行它们。拜托,当您有其他解决我的问题的好主意时,请告诉我。

标签: sql oracle while-loop execute procedures


【解决方案1】:

是的,我同意@Anand 你必须使用动态查询

WHILE EXISTS (SELECT 1 FROM PG_TABLE_1 WHERE STATUS = 'WAIT')
BEGIN
 SELECT TOP 1 @PROC =  PROCEDURE FROM PG_TABLE_1 WHERE STATUS = 'WAIT'

 SET @SQL = @SQL + @PROC

 EXEC (@SQL)

 UPDATE PG_TABLE_1 SET STATUS = 'OK' WHERE PROCEDURE = @PROC

END

另外请尝试更改ProcedureStatus

的列名

【讨论】:

  • 这是 T-SQL 而不是 PL/SQL,因此无法在 Oracle 数据库上编译。
猜你喜欢
  • 1970-01-01
  • 2010-09-09
  • 1970-01-01
  • 2017-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-22
相关资源
最近更新 更多