我正在使用 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' 是特定免疫注射的用量。疫苗批次中的“剂量”列说明标准免疫注射的用量。所以标准镜头可能是0.1cc。但一次免疫注射实际上可能使用 0.2cc 甚至 0.05cc。疫苗批次交易中的“数量”列最初记录了一个疫苗批次包含多少标准免疫注射。
我在这里尝试做的是计算疫苗批次的正确“Quantity_on_hand”(即,疫苗批次还剩下多少标准免疫注射)。
这是一个使用我们刚刚插入的数据的示例。我们有一个疫苗批次(批次 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
顺便说一句,我使用的是 10.2.0.1.0 版的 SQL*Plus。使用 SQL Developer(版本 3.0.04)时,我得到了相同的结果。
谁能帮忙看看这个问题?谢谢!