Oracle: 여러 열을 동시에 업데이트
동일한 업데이트 문을 사용하여 두 개의 열을 업데이트하려고 하는데 가능합니까?
IF V_COUNT = 9 THEN
UPDATE INVOICE
SET INV_DISCOUNT = DISC3 * INV_SUBTOTAL
, INV_TOTAL = INV_SUBTOTAL - INV_DISCOUNT
WHERE INV_ID = I_INV_ID;
DBMS_OUTPUT.PUT_LINE ('YOU QUALIFY FOR A DISCOUNT OF 30%');
문제는.INV_TOTAL
업데이트 중이 아니라 v_vmdk만 업데이트 중입니다.
DISC3 = 0.3 I.E 30% 할인. 따라서 sub_total에 0.3을 곱하면 INV_discount 값이 됩니다.
INV_TOTAL = sub_total - 할인
INV_ID|INV_DATETIME |INV_SUBTOTAL|INV_DISCOUNT| INV_TOTAL
----------|------------------------------|------------|------------|-----------
100|14-NOV-12 09.40.06.918000 | $.00| $.00| $.00
101|18-MAR-12 10.03.00.000000 | $.00| $.00| $.00
102|18-MAR-12 10.15.00.000000 | $.00| $.00| $.00
103|18-MAR-12 10.55.00.000000 | $80.00| $8.00| $72.00
104|18-MAR-12 10.38.00.000000 | $.00| $.00| $.00
105|12-JUN-12 15.15.00.000000 | $.00| $.00| $.00
106|06-AUG-12 12.13.00.000000 | $.00| $.00| $.00
107|04-MAY-12 09.15.00.000000 | $.00| $.00| $.00
108|29-NOV-12 13.16.00.000000 | $25.00| $5.00| $22.50
109|18-MAR-12 10.37.00.000000 | $50.00| $15.00| $45.00
108은 25의 20%로 예상됩니다. 할인 금액은 맞지만 inv_total은 그렇지 않습니다. $22.50이 아니라 $20이어야 합니다.
109는 50의 30% 할인 금액이 맞지만 inv_total은 35달러여야 합니다.
103은 10% 할인된 것으로 계산됩니다.
동일한 문에서 여러 열을 업데이트하는 것이 완벽하게 가능하며, 실제로 코드가 이를 수행하고 있습니다.그렇다면 "INV_TOTAL은 업데이트되지 않고 inv_discount만 업데이트됩니다"라고 표시되는 이유는 무엇입니까?
INV_DISCOUNT를 사용하여 INV_TOTAL을 업데이트하고 있으며 데이터베이스는 변경한 값이 아닌 기존 값 INV_DISCOUNT를 사용합니다.그래서 유감스럽게도 당신이 해야 할 일은 다음과 같습니다.
UPDATE INVOICE
SET INV_DISCOUNT = DISC1 * INV_SUBTOTAL
, INV_TOTAL = INV_SUBTOTAL - (DISC1 * INV_SUBTOTAL)
WHERE INV_ID = I_INV_ID;
아마도 그것은 당신에게 좀 투박하게 보일 것입니다.그렇습니다. 하지만 문제는 데이터 모델에 있습니다.필요할 때 파생되는 것이 아니라 테이블에 파생되는 값을 저장하면 우아한 SQL이 생성되는 경우는 거의 없습니다.
여기서 문제가 되는 것은 당신이 INV_DISCOUNT를 업데이트하고 INV_TOTAL이 INV_DISCOUNT를 사용한다는 것입니다.업데이트 문 반환 절을 사용하여 새 INV_DISCOUNT를 사용하고 이를 사용하여 INV_TOTAL을 업데이트할 수 있습니다.
이것은 일반적인 예입니다. 이것이 제가 언급한 요점을 설명하는지 알려주세요.
CREATE OR REPLACE PROCEDURE SingleRowUpdateReturn
IS
empName VARCHAR2(50);
empSalary NUMBER(7,2);
BEGIN
UPDATE emp
SET sal = sal + 1000
WHERE empno = 7499
RETURNING ename, sal
INTO empName, empSalary;
DBMS_OUTPUT.put_line('Name of Employee: ' || empName);
DBMS_OUTPUT.put_line('New Salary: ' || empSalary);
END;
언급URL : https://stackoverflow.com/questions/13539334/oracle-updating-multiple-columns-at-once
'programing' 카테고리의 다른 글
Python에서 numpy로 자연 로그(예: "ln()")를 수행하는 방법은 무엇입니까? (0) | 2023.07.20 |
---|---|
Oracle의 테이블에서 N번째 행 선택 (0) | 2023.07.20 |
큰따옴표가 있는 문자열을 표에 삽입 (0) | 2023.07.20 |
수백만 개의 행이 있는 테이블을 사용하여 Oracle에서 임의 행을 더 빠르게 선택할 수 있는 방법은 무엇입니까? (0) | 2023.07.20 |
'http:/.127.0.0.1:%HTPORT%/apex/f?p=4950'을(를) 찾을 수 없습니다.이름을 올바르게 입력했는지 확인한 다음 다시 시도하십시오. (0) | 2023.07.15 |