【发布时间】:2016-12-08 01:44:26
【问题描述】:
标题可能有点混乱 - 我将在这里深入探讨细节......
想象一下简化的日志表:
run_id | step_id | result |
--------------------------------
1 | 1 | done |
1 | 2 | done |
1 | 3 | done |
1 | 4 | done |
2 | 1 | failed |
3 | 1 | done |
3 | 2 | done |
但是当我同时运行两个作业(run_id 1 和 2)时,碰巧他们共享了不正确的 run_id !!
我希望每个工作都有单独的 id .. 显然 :)
如何在 Oracle(PL/SQL - 主要是包)中对同时开始的作业(即早上 6 点)强制执行它...
你有什么想法吗?你如何解决这种情况?如果我在 (run_id, step_id) 上创建唯一索引怎么办? “第二个”工作会失败吗?还是会自动增加值?
SELECT nvl(max(run_id), 0)+1 INTO v_run_id
FROM my_schema.log_table;
这是代码,获取新值...但它不起作用,因为...如上所述
谢谢
编辑: 作为一种解决方法,我考虑使用字符串和日期...使用 start_date 和常量字符串(run_name 而不是 run_id)...所以表格看起来像
run_name | run_date | step_id | result |
--------------------------------------------------------
my_job#1 | 1/1/2016 7:00:00 AM | 1 | done |
my_job#1 | 1/1/2016 7:00:00 AM | 2 | done |
my_job#1 | 1/1/2016 7:00:00 AM | 3 | done |
my_job#1 | 1/1/2016 7:00:00 AM | 4 | done |
my_job#2 | 1/1/2016 7:00:00 AM | 1 | failed |
my_job#1 | 1/2/2016 7:00:00 AM | 1 | done |
my_job#1 | 1/2/2016 7:00:00 AM | 2 | done |
这可以工作..我只是好奇如何使用 ID 来做到这一点
【问题讨论】:
标签: oracle