2011-11-22 16 views
5

मैं 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 में 'खुराक' कॉलम बताता है कि मानक टीकाकरण शॉट के लिए कितना उपयोग करना है। तो एक मानक शॉट 0.1cc हो सकता है। लेकिन एक टीकाकरण शॉट वास्तव में 0.2cc या 0.05cc का उपयोग कर सकता है। Vaccine_lot_transaction रिकॉर्ड में 'मात्रा' कॉलम मूल रूप से कितने मानक टीकाकरण में एक टीकाकरण शॉट शामिल है।

मैं जो करने की कोशिश कर रहा हूं वह वैक्सीन लॉट के लिए सही 'मात्रा_ऑन_हैंड' की गणना करना है (यानी, टीकाकरण के लिए कितने मानक टीकाकरण शॉट अभी भी बाकी हैं)।

यहाँ डेटा हम सिर्फ डाला का उपयोग कर एक उदाहरण है। हमारे पास एक टीका है (बहुत आईडी '100' है), और यह 150 मानक शॉट्स के साथ शुरू होती है (यानी, इसमें 150 0.2 सीसी शॉट्स हैं)। इस लॉट से पहले से ही दो टीकाकरण शॉट हैं, एक 0.2 सीसी, अन्य 0.3 सीसी)। और 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 
); 

और यकीन है कि पर्याप्त, ओरेकल "दायां कोष्ठक लापता" के बारे में शिकायत करने के लिए शुरू होता है:

यहाँ मेरी क्वेरी है। ऐसा लगता है कि ऐसा लगता है कि कुछ वाक्य रचनात्मक रूप से गलत है।

किसी को भी मदद कर सकते हैं कि इस प्रश्न पर एक नज़र डालें और देखें कि क्या इसके साथ गलत क्या है? धन्यवाद! मैं एसक्यूएल * प्लस के संस्करण 10.2.0.1.0 उपयोग कर रहा हूँ,

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 डेवलपर (संस्करण 3.0.04) का उपयोग करते समय मुझे एक ही परिणाम मिलता है।

किसी को भी मदद कर सकते हैं इस मुद्दे पर एक नज़र डालें? धन्यवाद!

+3

टेबल परिभाषाओं और नमूना डेटा पोस्ट करने के लिए आपको बहुत बहुत धन्यवाद! स्पष्ट रूप से यह बताने के लिए भी उपयोगी होगा कि आपके 'अद्यतन' कथन का अपेक्षित परिणाम क्या होना चाहिए। मुझे लगता है कि 147.5 का 'QUANTITY_ON_HAND' सही है लेकिन आप स्पष्ट रूप से मुझे बेहतर जानते हैं कि आप क्या चाहते हैं। –

+0

एसक्यूएल * प्लस से आपके कट और पेस्ट में, ऐसा लगता है कि कुछ काटा जा रहा है। जब आपने प्रारंभ में अपनी क्वेरी पोस्ट की थी (और जब मैंने इसे चलाया था) तो लाइन 4 पर एक अतिरिक्त 't_id) था। यदि वास्तव में वहां नहीं है, तो आपको एक लापता ब्रांड्स त्रुटि मिल जाएगी। –

+0

यह मुझे लगता है कि प्रदर्शन मुद्दा था। मैंने क्वेरी को फिर से स्वरूपित किया ताकि कुछ भी कट न हो (कृपया मेरी मूल पोस्ट देखें, जिसे अपडेट किया गया था), और मैं अभी भी एक ही परिणाम के साथ समाप्त हुआ। – Hua

उत्तर

2

मैं कटौती करने और अपने कोड चिपकाया और यह (मेरा मानना ​​है कि 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 
+0

आपके उत्तर जस्टिन के लिए धन्यवाद।
यह वास्तव में मुझे परेशान करता है क्योंकि मैं 10 जी का उपयोग कर रहा हूं, और यह मुझे SQL डेवलपर और एसक्यूएल प्लस दोनों पर एक ही त्रुटि दे रहा है ... – Hua

+0

@ user1060340 - क्या आप एसक्यूएल * प्लस से कट-एंड-पेस्ट कर सकते हैं जैसे मैंने किया जो आपको मिल रही त्रुटि दिखाता है? क्या आप एसक्यूएल * प्लस का एक उल्लेखनीय हालिया संस्करण उपयोग कर रहे हैं? या आप 10 जी डेटाबेस तक पहुंचने के लिए एसक्यूएल * प्लस के पुराने संस्करण का उपयोग कर रहे हैं? –

+0

एसक्यूएल> चलाने 1 अद्यतन vaccine_lot वी सेट quantity_on_hand = 2 ( 3 ( 4 (चयन T.quantity * V.dose vaccine_lot_transaction टी से कहां V.vaccine_lot_id = T.vaccine_lo 5 (चयन योग (I.dose_magnitude) टीकाकरण से मैं कहां I.vaccine_lot_id = V.vaccine_lot_id) 6)/खुराक 7 *); (से vaccine_lot_transaction टी कहां V.vaccine_lot_id = T.vaccine_lot त्रुटि लाइन 4 पर चयन T.quantity * V.dose: ओआरए -00 9 07: गायब दाएं कोष्ठक
वैसे, मैं SQL * प्लस के संस्करण 10.2.0.1.0 का उपयोग कर रहा हूं। मुझे SQL Devel का उपयोग करते समय एक ही परिणाम मिलता है ऑपरेट (संस्करण 3.0.04)। एक बार फिर धन्यवाद! – Hua

संबंधित मुद्दे