首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(又如)“缺少右括号”

(又如)“缺少右括号”
EN

Stack Overflow用户
提问于 2011-11-23 03:18:29
回答 1查看 1.2K关注 0票数 5

我正在使用10g,并尝试进行一些简单的计算,然后将结果保存在一个列中。实际的表有更多的列,但以下是我在查询中使用的列:

代码语言:javascript
复制
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中的“剂量”列说明了标准免疫接种的使用量。所以一个标准的射程可能是0.1cc。但一针免疫实际上可能使用0.2cc,甚至0.05cc。vaccine_lot_transaction中的“Quantity”列最初记录了一批疫苗包含多少次标准免疫接种。

我在这里尝试做的是计算疫苗批次的正确'Quantity_on_hand‘(即,还剩下多少标准免疫接种给疫苗批次)。

下面是一个使用我们刚刚插入的数据的示例。我们有一个疫苗批次(批次ID是'100'),它从150个标准疫苗开始(即,它包含150个0.2cc疫苗)。已经有两次免疫接种,一个是0.2cc,另一个是0.3cc)。而当前的120个数量显然是错误的,我们需要重新计算和更新它。

下面是我的问题:

代码语言:javascript
复制
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
);

果然,Oracle开始抱怨“缺少右括号”。看起来它认为在语法上有问题。

有没有人可以帮我看一下这个查询,看看它有什么问题?谢谢!

这是我通过SQL*PLUS运行它时得到的结果:

代码语言:javascript
复制
    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)时,我得到了相同的结果。

有没有人能帮我看看这个问题?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2011-11-23 03:23:46

我剪切并粘贴了您的代码,它似乎对我有效(我相信147.5的最终结果是正确的)。您确定您没有意外地将问题简化得太多吗?

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8232486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档