更新Oracle存储过程来介绍一个检查

问题描述:

我们与Oracle中的以下存储过程中的问题,它标志着谁已经离开了公司在2099年更新Oracle存储过程来介绍一个检查

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; 

但是,正如你可以形象这不会工作。你能帮我弄到这个工作吗,

+0

请注意,T-SQL插入,以显示我想要做一个例子,不知道如何或是否可能与PL-SQL来做到这一点。 – user3481395

你在PL/SQL代码上使用TransactSQL语法。这是行不通的。如果您需要添加该检查,请使用正确的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条款。

+0

是的,这就是问题的一部分,我不熟悉到PL-SQL,我只是带我想做什么做榜样。 – user3481395

+0

看起来不错,患病把它在我们的测试环境。谢谢巴勃罗 – user3481395