나는 10g을 사용하고 간단한 계산을 시도하고 그 결과를 열에 저장하려고합니다. 실제 테이블에 더 많은 열을 가지고 있지만, 여기에 내 쿼리에서 사용하고있는 것을 :(아직 또 다른) "누락 된 오른쪽 괄호"
CREATE TABLE "VACCINE_LOT"
(
"VACCINE_LOT_ID" NUMBER(10,0) NOT NULL ENABLE,
"DOSE" NUMBER(6,3),
"QUANTITY_ON_HAND" NUMBER(12,2) NOT NULL ENABLE
)
CREATE TABLE "IMMUNIZATION"
(
"VACCINE_LOT_ID" NUMBER(10,0),
"DOSE_MAGNITUDE" NUMBER(4,2)
)
CREATE TABLE "VACCINE_LOT_TRANSACTION"
(
"VACCINE_LOT_ID" NUMBER(10,0) NOT NULL ENABLE,
"QUANTITY" NUMBER(12,2) NOT NULL ENABLE
)
INSERT INTO vaccine_lot VALUES (100, 0.2, 120);
INSERT INTO immunization VALUES (100, 0.2);
INSERT INTO immunization VALUES (100, 0.3);
INSERT INTO vaccine_lot_transaction VALUES (100, 150);
예방 접종 샷이 백신 로트에서 가져옵니다. 'Dose_magnitude'는 특정 예방 접종 사가 많이 사용하는 양입니다. vaccine_lot의 'Dose (복용량)'열은 표준 예방 접종 슛을 위해 얼마를 사용해야하는지 알려줍니다. 표준 샷은 0.1cc 일 수 있습니다. 그러나 하나의 예방 주사는 실제로 0.2cc 또는 0.05cc를 사용할 수 있습니다. vaccine_lot_transaction의 'Quantity'열은 원래 백신 로트에 포함 된 표준 예방 접종 주사 횟수를 기록합니다.
여기서 내가하려고하는 것은 백신 로트 (백신 로트에 대해 얼마나 많은 표준 예방 접종 샷이 남아 있는지)에 대해 올바른 'Quantity_on_hand'를 계산하는 것입니다.
방금 삽입 한 데이터를 사용한 예입니다. 우리는 백신 롯트 (lot ID는 '100')를 가지고 있으며 150 개의 표준 샷 (즉, 150 개의 0.2cc 샷을 포함)으로 시작합니다. 이미이 로트에서 두 번의 예방 접종이 있었는데 하나는 0.2cc이고 다른 하나는 0.3cc입니다. 그리고 120의 현재 양은 분명히 잘못되었습니다. 우리는 그것을 다시 계산하고 업데이트해야합니다.
UPDATE vaccine_lot V SET quantity_on_hand =
(
(
(SELECT T.quantity * V.dose FROM vaccine_lot_transaction T WHERE V.vaccine_lot_id = T.vaccine_lot_id) -
(SELECT SUM(I.dose_magnitude) FROM immunization I WHERE I.vaccine_lot_id = V.vaccine_lot_id)
)/dose
);
그리고 충분한 확인이 오라클은 "오른쪽 괄호 누락"에 대해 불평하기 시작 :
여기 내 쿼리입니다. 문법적으로 잘못된 것이 있다고 생각하는 것 같습니다.
누구든지이 쿼리를 살펴보고 문제가 무엇인지 확인할 수 있습니까? 감사!
이 내가 SQL의 *를 통해 실행할 때 내가 무엇을 얻을 PLUS : 그런데
SQL> run
1 UPDATE vaccine_lot V SET quantity_on_hand =
2 (
3 (
4 (SELECT T.quantity * V.dose FROM vaccine_lot_transaction T
5 WHERE V.vaccine_lot_id = T.vaccine_lot_id) -
6 (SELECT SUM(I.dose_magnitude) FROM immunization I
7 WHERE I.vaccine_lot_id = V.vaccine_lot_id)
8 )/dose
9*);
WHERE V.vaccine_lot_id = T.vaccine_lot_id) -
*
ERROR at line 5:
ORA-00907: missing right parenthesis
, 나는 SQL * 플러스의 버전 10.2.0.1.0을 사용하고 있습니다. SQL Developer (버전 3.0.04)를 사용할 때도 동일한 결과를 얻습니다.
누구든지이 문제를 살펴볼 수 있습니까? 감사!
테이블 정의 및 샘플 데이터를 게시 해 주셔서 감사합니다. 또한 UPDATE 문의 예상 결과가 무엇인지 명시 적으로 기술하는 것이 유용 할 것입니다. 나는 147.5의 QUANTITY_ON_HAND가 맞다고 생각하지만, 분명히 내가 원하는 것보다 더 잘 알고있다. –
SQL * Plus에서 잘라내어 붙여 넣기 할 때, 뭔가 잘리는 것처럼 보입니다. 쿼리를 처음 게시했을 때 (그리고 내가 그것을 실행했을 때) 줄 4에 여분의't_id) -'가있었습니다. 실제로 거기에 없으면 괄호 오류가 누락되었습니다. –
내가 믿는 디스플레이 문제였습니다. 아무것도 잘라내 지 않도록 쿼리의 서식을 다시 지정했습니다 (업데이트 된 내 원래 게시물을 참조하십시오). 그리고 나는 여전히 같은 결과를 얻었습니다. – Hua