私は 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かもしれません。しかし、1 回の予防接種で実際に使用される量は 0.2cc または 0.05cc です。vaccine_lot_transaction の「Quantity」列には、元々、ワクチン ロットに含まれる標準予防接種のショット数が記録されています。
私がここでやろうとしているのは、ワクチン ロットの正しい '手元の数量' (つまり、ワクチン ロットにまだ残っている標準的な予防接種の注射の数) を計算することです。
挿入したデータを使用した例を次に示します。ワクチン ロット (ロット ID は「100」) があり、150 の標準ショット (つまり、150 の 0.2cc ショットが含まれています) から始まります。このロットからすでに 2 回の予防接種が行われています (1 回は 0.2cc、もう 1 回は 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*Plus のバージョン 10.2.0.1.0 を使用しています。SQL Developer (バージョン 3.0.04) を使用しても同じ結果が得られます。
誰でもこの問題を調べるのを手伝ってもらえますか? ありがとう!