简体   繁体   English

程序包中没有错误的过程不会更新数据库中的表

[英]Procedure in package without error is not updating table in database

I have got a package with four procedures which works fine. 我有一个包含四个程序的程序包,可以正常工作。 I added another (fifth) procedure to existing package. 我在现有软件包中添加了另一个(第五个)过程。 When I execute new package with five procedures I receive information: "Package body created". 当我通过五个过程执行新程序包时,我收到信息:“程序包主体已创建”。 When I check table in database which should be updated there is no change and when I check application there is no change as well. 当我检查数据库中应该更新的表时,没有变化,当我检查应用程序时,也没有变化。

To test/execute package in Toad I press 'Execute a script'. 要在Toad中测试/执行程序包,请按“执行脚本”。 I have checked separately only select statement and only update statement and it works fine (in the way I would expect). 我已经分别检查了仅select语句和only update语句,并且工作正常(以我期望的方式)。 It looks like update statement is not working but it might be something else. 看起来update语句不起作用,但可能还有其他原因。

I was trying to sort it out for very long time but I do not see where the problem is. 我试图解决它很长时间,但是我看不出问题出在哪里。

Please find below procedure I would like to add: 请找到以下我要添加的过程:

PROCEDURE procedure_name_test (errbuf OUT VARCHAR2, retcode OUT NUMBER)
IS
    CURSOR c_headers
    IS
        SELECT I.INVOICE_ID, SUM(D.AMOUNT) AS HOLD_VALUE
        FROM APD D,
             API I,
             APH H
        WHERE D.LINE_TYPE_LOOKUP_CODE = 'ITEM'
        AND D.BASE_AMOUNT IS NULL
        AND D.PO_DISTRIBUTION_ID IS NULL
        AND D.UNIT_PRICE IS NULL
        AND I.PAY_GROUP_LOOKUP_CODE = 'RESALE'
        AND H.hold_lookup_code = 'ITEM NOT ON PO'
        AND H.RELEASE_LOOKUP_CODE IS NULL
        AND H.RELEASE_REASON IS NULL
        AND I.INVOICE_ID = D.INVOICE_ID
        AND D.INVOICE_ID = H.INVOICE_ID  
        GROUP BY I.INVOICE_ID
        HAVING SUM(AMOUNT) < 100
        AND ( SUM(AMOUNT) < 50
            OR ( MAX(AMOUNT) < 50 AND MIN(AMOUNT) < 50) );

    v_rec_count NUMBER := 0;
    COUNT1 NUMBER := 0;

BEGIN

    FOR c_headers_r IN c_headers
    LOOP
        v_rec_count := v_rec_count + 1;
        fnd_file.put_line (fnd_file.output,
            'No Of Invoices with Immaterial ITEM NOT ON PO Hold : '
                || v_rec_count );
        UPDATE APH
        SET last_update_date = SYSDATE,
            last_updated_by = fnd_profile.VALUE ('USER_ID'),
            release_lookup_code = 'Immaterial Matching Rel',
            release_reason = 'Immaterial matching difference TEST '
                || TRIM (TO_CHAR (c_headers_r.HOLD_VALUE,'L999G999G999G990D99'))
                || ' (system)',   
            last_update_login = (SELECT MAX (submitted_login_id)
                                 FROM applsys.fnd_logins
                                 WHERE user_id = fnd_profile.VALUE ('USER_ID')),
            responsibility_id = fnd_profile.VALUE ('RESP_ID')

        WHERE RELEASE_LOOKUP_CODE IS NULL
        AND HOLD_LOOKUP_CODE = 'ITEM NOT ON PO';

        commit;

        COUNT1 := COUNT1 + 1;

    END LOOP;

    fnd_file.put_line (FND_FILE.output,
        'No Of Invoices where Immaterial Hold released : '|| COUNT1);

EXCEPTION
    WHEN NO_DATA_FOUND
    THEN
        fnd_file.put_line (FND_FILE.output,'No data Found');

    WHEN OTHERS
    THEN
        fnd_file.put_line (fnd_file.LOG,'Immaterial hold is not Released:'
            ||SQLERRM);    
END;

The message "Package body created" means that you have succesfully compiled the new code in the database. 消息“包主体已创建”表示您已成功在数据库中编译了新代码。 Next step is to actually run your code. 下一步是实际运行您的代码。

Something like this: 像这样:

declare
  l_error_buffer varchar2(32767);
  l_retcode number;
begin
  package_name.procedure_name_test (l_error_buffer, l_retcode);
end;
/

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM