[英]ORACLE) update query Why doesn't it work?
this is procedure in oracle pakage update query Why doesn't it work? 这是oracle pakage更新查询中的过程为什么它不起作用?
create or replace PACKAGE BODY SAP_MATERIALMASTER_PKG IS
PROCEDURE SAP_MATERIALMASTER_INS (
TRANS_REF_NO IN NUMBER,
MATERIAL IN VARCHAR2,
UNIT_OF_MEASURE IN CHAR )
IS
cnt NUMBER := 0;
BEGIN
--insert or update 구분을 위한 동작
select COUNT(*) into cnt from SAP_MATERIAL
where
material = MATERIAL;
if cnt = 0 then
INSERT INTO SAP_MATERIAL(
TRANS_REF_NO,MATERIAL,UNIT_OF_MEASURE
)
VALUES(TRANS_REF_NO,MATERIAL,UNIT_OF_MEASURE); commit;
else
UPDATE SAP_MATERIAL
SET
TRANS_REF_NO = TRANS_REF_NO,
MATERIAL = MATERIAL,
UNIT_OF_MEASURE = UNIT_OF_MEASURE
WHERE MATERIAL = MATERIAL;
commit;
end if;
END SAP_MATERIALMASTER_INS;
END SAP_MATERIALMASTER_PKG;
Fix your parameters! 修正您的参数! They need to differ from the column names.
它们需要与列名不同。 I recommend a prefix, in this case
in_
to indicate that these are "in" parameters: 我建议使用前缀
in_
以指示这些是“输入”参数:
PROCEDURE SAP_MATERIALMASTER_INS (
in_TRANS_REF_NO IN NUMBER,
in_MATERIAL IN VARCHAR2,
in_UNIT_OF_MEASURE IN CHAR
) as
cnt NUMBER := 0;
BEGIN
. . .
UPDATE SAP_MATERIAL
SET TRANS_REF_NO = in_TRANS_REF_NO,
UNIT_OF_MEASURE = in_UNIT_OF_MEASURE
WHERE MATERIAL = in_MATERIAL;
. . .
Along with @GordonLinoff's solution, might I suggest that you learn to use a MERGE statement? 连同@GordonLinoff的解决方案一起,我是否建议您学习使用MERGE语句? It's designed to do precisely what you're doing with less code:
它旨在使用更少的代码来精确地执行您正在做的事情:
PROCEDURE SAP_MATERIALMASTER_INS (pin_TRANS_REF_NO IN NUMBER,
pin_MATERIAL IN VARCHAR2,
pin_UNIT_OF_MEASURE IN CHAR )
IS
BEGIN
MERGE INTO SAP_MATERIAL sm
USING (SELECT pin_TRANS_REF_NO AS P_TRANS_REF_NO,
pin_MATERIAL AS P_MATERIAL,
pin_UNIT_OF_MEASURE AS P_UNIT_OF_MEASURE
FROM DUAL) d
ON (sm.MATERIAL = d.P_MATERIAL)
WHEN NOT MATCHED THEN
INSERT (TRANS_REF_NO, MATERIAL, UNIT_OF_MEASURE)
VALUES (d.P_TRANS_REF_NO, d.P_MATERIAL, d.P_UNIT_OF_MEASURE)
WHEN MATCHED THEN
UPDATE
SET sm.TRANS_REF_NO = d.P_TRANS_REF_NO,
sm.UNIT_OF_MEASURE = d.P_UNIT_OF_MEASURE;
COMMIT;
END SAP_MATERIALMASTER_INS;
Plus, SELECT COUNT(*)...
can be very slow. 另外,
SELECT COUNT(*)...
可能非常慢。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.