oracle – (又一个)“缺少正确的括号”
我正在使用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,"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_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 顺便说一下,我使用的是SQL * Plus版本10.2.0.1.0.使用SQL Developer(版本3.0.04)时,我得到相同的结果. 任何人都可以帮忙看一下这个问题吗?谢谢! 解决方法我剪切并粘贴了你的代码,它似乎对我有效(我相信147.5的最终结果是正确的).你确定你没有意外地将问题简化到太远吗?SQL> CREATE TABLE "VACCINE_LOT" 2 ( 3 "VACCINE_LOT_ID" NUMBER(10,4 "DOSE" NUMBER(6,5 "QUANTITY_ON_HAND" NUMBER(12,2) NOT NULL ENABLE 6 ); Table created. SQL> CREATE TABLE "IMMUNIZATION" 2 ( 3 "VACCINE_LOT_ID" NUMBER(10,4 "DOSE_MAGNITUDE" NUMBER(4,2) 5 ); Table created. SQL> CREATE TABLE "VACCINE_LOT_TRANSACTION" 2 ( 3 "VACCINE_LOT_ID" NUMBER(10,4 "QUANTITY" NUMBER(12,2) NOT NULL ENABLE 5 ); Table created. SQL> INSERT INTO vaccine_lot VALUES (100,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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |