更新 Oracle 存储过程以引入检查

用户3481395

我们在 oracle 中的以下存储过程有问题,它将离开公司的员工标记为 2099 年开始。

create or replace PROCEDURE             "USP_DISABLELEFTEMPLOYEES"
AS
BEGIN
UPDATE SHOP_EMPLOYEE
SET DATE_STARTED = '01 JAN 2099',
PROCESSED      = 1
WHERE PROCESSED <> 1;
COMMIT;
END;

长话短说,它标志着我们所有的员工都离开了公司,因为从 sftp 服务器发送的初始文件是空的。我是 oracle 和 pl-sql 的新手,所以我想在存储过程运行之前引入一个检查。

数据首先加载到 SHOP_EMPLOYEE_IMPORT 中,所以我想要做的是检查该表是否包含少于 5000 条存储过程不会运行的记录。

create or replace PROCEDURE             "USP_DISABLELEFTEMPLOYEES"
AS
**SELECT @var = AbortJob FROM SHOP_EMPLOYEE_IMPORT where varname = @AbortJob
IF (@@ROWCOUNT > 5000)**
BEGIN
UPDATE SHOP_EMPLOYEE
SET DATE_STARTED = '01 JAN 2099',
PROCESSED      = 1
WHERE PROCESSED <> 1;
COMMIT;
END;

但是,正如您可以想象的那样,这行不通。你能帮我解决这个问题吗

巴勃罗圣克鲁斯

您正在代码TransactSQL使用语法PL/SQL那行不通。如果您需要添加该检查,请使用正确的PL/SQL语法添加

像这样的东西:

create or replace PROCEDURE "USP_DISABLELEFTEMPLOYEES"(p_AbortJob varchar2(200))
   cnt as number;
AS
    select count(1) into cnt
      FROM SHOP_EMPLOYEE_IMPORT where varname = p_AbortJob;
    IF cnt > 5000 then
    BEGIN
        UPDATE SHOP_EMPLOYEE
        SET DATE_STARTED = '01 JAN 2099',
            PROCESSED      = 1
        WHERE PROCESSED <> 1;
        COMMIT;
    END;
END;

此外,请勿commit在您的程序中包含该条款。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章