[英]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.