मैं 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) का उपयोग करते समय मुझे एक ही परिणाम मिलता है।
किसी को भी मदद कर सकते हैं इस मुद्दे पर एक नज़र डालें? धन्यवाद!
टेबल परिभाषाओं और नमूना डेटा पोस्ट करने के लिए आपको बहुत बहुत धन्यवाद! स्पष्ट रूप से यह बताने के लिए भी उपयोगी होगा कि आपके 'अद्यतन' कथन का अपेक्षित परिणाम क्या होना चाहिए। मुझे लगता है कि 147.5 का 'QUANTITY_ON_HAND' सही है लेकिन आप स्पष्ट रूप से मुझे बेहतर जानते हैं कि आप क्या चाहते हैं। –
एसक्यूएल * प्लस से आपके कट और पेस्ट में, ऐसा लगता है कि कुछ काटा जा रहा है। जब आपने प्रारंभ में अपनी क्वेरी पोस्ट की थी (और जब मैंने इसे चलाया था) तो लाइन 4 पर एक अतिरिक्त 't_id) था। यदि वास्तव में वहां नहीं है, तो आपको एक लापता ब्रांड्स त्रुटि मिल जाएगी। –
यह मुझे लगता है कि प्रदर्शन मुद्दा था। मैंने क्वेरी को फिर से स्वरूपित किया ताकि कुछ भी कट न हो (कृपया मेरी मूल पोस्ट देखें, जिसे अपडेट किया गया था), और मैं अभी भी एक ही परिणाम के साथ समाप्त हुआ। – Hua