我们在 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] 删除。
我来说两句