更新Oracle存储过程以引入检查
oracle中的以下存储过程存在问题,它将离开公司的员工标记为2099年开始工作更新Oracle存储过程以引入检查,oracle,if-statement,stored-procedures,plsql,Oracle,If Statement,Stored Procedures,Plsql,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; 创建或替换过程“USP\u DIS
create or replace PROCEDURE "USP_DISABLELEFTEMPLOYEES"
AS
BEGIN
UPDATE SHOP_EMPLOYEE
SET DATE_STARTED = '01 JAN 2099',
PROCESSED = 1
WHERE PROCESSED <> 1;
COMMIT;
END;
创建或替换过程“USP\u DISABLELEFTEMPLOYEES”
作为
开始
更新店铺员工信息
设置开始日期='01 JAN 2099',
已处理=1
如已处理,则为1;
犯罪
结束;
长话短说,当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;
创建或替换过程“USP\u DISABLELEFTEMPLOYEES”
作为
**从车间\员工\导入中选择@var=AbortJob,其中varname=@AbortJob
如果(@@ROWCOUNT>5000)**
开始
更新店铺员工信息
设置开始日期='01 JAN 2099',
已处理=1
如已处理,则为1;
犯罪
结束;
然而,正如你想象的那样,这是行不通的。如果您在
PL/SQL
代码上使用transact-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;
创建或替换程序“USP_DISABLELEFTEMPLOYEES”(p_AbortJob varchar2(200))
cnt为数字;
作为
选择计数(1)到cnt
从SHOP_EMPLOYEE_IMPORT,其中varname=p_AbortJob;
如果cnt>5000,则
开始
更新店铺员工信息
设置开始日期='01 JAN 2099',
已处理=1
如已处理,则为1;
犯罪
结束;
结束;
另外,不要在您的过程中包含
commit
子句。是的,这是我不熟悉PL-SQL的部分问题,我只是展示了一个我想做的示例。看起来不错,我会将它放在我们的测试环境中。谢谢,请注意,插入T-SQL是为了显示我想做什么的示例,我不知道如何或是否可以使用PL-SQL来实现这一点。