gpt4 book ai didi

oracle - (又一个) "Missing Right Parenthesis"

转载 作者:行者123 更新时间:2023-12-04 21:23:16 24 4
gpt4 key购买 nike

我正在使用 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);

免疫注入(inject)取自疫苗批处理。 'Dose_magnitude' 是特定免疫注入(inject)的用量。疫苗批处理中的“剂量”列说明标准免疫注入(inject)的用量。所以标准镜头可能是0.1cc。但一次免疫注入(inject)实际上可能使用 0.2cc 甚至 0.05cc。疫苗批处理交易中的“数量”列最初记录了一个疫苗批处理包含多少标准免疫注入(inject)。

我在这里尝试做的是计算疫苗批处理的正确“Quantity_on_hand”(即,疫苗批处理还剩下多少标准免疫注入(inject))。

这是一个使用我们刚刚插入的数据的示例。我们有一个疫苗批处理(批处理 ID 为“100”),它以 150 次标准注入(inject)开始(即包含 150 次 0.2cc 注入(inject))。这批已经有两个免疫注入(inject),一个 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)时,我得到了相同的结果。

谁能帮忙看看这个问题?谢谢!

最佳答案

我剪切并粘贴了您的代码,它似乎对我有用(我相信 147.5 的最终结果是正确的)。你确定你没有不小心把问题简化得太远了吗?

SQL> CREATE TABLE "VACCINE_LOT"
2 (
3 "VACCINE_LOT_ID" NUMBER(10,0) NOT NULL ENABLE,
4 "DOSE" NUMBER(6,3),
5 "QUANTITY_ON_HAND" NUMBER(12,2) NOT NULL ENABLE
6 );

Table created.

SQL> CREATE TABLE "IMMUNIZATION"
2 (
3 "VACCINE_LOT_ID" NUMBER(10,0),
4 "DOSE_MAGNITUDE" NUMBER(4,2)
5 );

Table created.

SQL> CREATE TABLE "VACCINE_LOT_TRANSACTION"
2 (
3 "VACCINE_LOT_ID" NUMBER(10,0) NOT NULL ENABLE,
4 "QUANTITY" NUMBER(12,2) NOT NULL ENABLE
5 );

Table created.

SQL> INSERT INTO vaccine_lot VALUES (100, 0.2, 120);

1 row created.

SQL> INSERT INTO immunization VALUES (100, 0.2);

1 row created.

SQL> INSERT INTO immunization VALUES (100, 0.3);

1 row created.

SQL> INSERT INTO vaccine_lot_transaction VALUES (100, 150);

1 row created.

SQL> commit;

Commit complete.

SQL> UPDATE vaccine_lot V SET quantity_on_hand =
2 (
3 (
4 (SELECT T.quantity * V.dose FROM vaccine_lot_transaction T WHERE V.vacci
ne_lot_id = T.vaccine_lot_id) -
5 (SELECT SUM(I.dose_magnitude) FROM immunization I WHERE I.vaccine_lot_id
= V.vaccine_lot_id)
6 ) / dose
7 );

1 row updated.

SQL> select * from vaccine_lot;

VACCINE_LOT_ID DOSE QUANTITY_ON_HAND
-------------- ---------- ----------------
100 .2 147.5

关于oracle - (又一个) "Missing Right Parenthesis",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8232486/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com