10g kullanıyorum ve basit bir hesaplama yapmaya çalışıyorum ve sonucu bir sütuna kaydedin. Gerçek tablo çok daha fazla sütuna sahip, ama burada benim sorguda kullanıyorum ne:(Yine başka) "Eksik Sağ Parantez"
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);
Bağışıklama çekimler aşı partisinin alınır. 'Dose_magnitude', belirli bir aşılama atışının ne kadar çok kullandığıdır. Vaccine_lot'daki 'Doz' sütunu standart bir aşılama çekimi için ne kadar kullanılacağını anlatır. Yani standart bir atış 0,1cc olabilir. Ancak bir aşılama vuruşu aslında 0.2cc veya hatta 0.05cc kullanabilir. Vaccine_lot_transaction'daki 'Quantity' sütunu, aslen bir aşı partisinin kaç tane standart immünizasyon çekildiğini kaydeder.
Burada yapmaya çalıştığım şey, aşı lotları için doğru 'Quantity_on_hand' (yani aşı partileri için kaç standart immünizasyon çekimi kalıyorsa) hesaplamaktır.
Eklediğimiz verileri kullanarak bir örnek. Aşı lotumuz var (lot ID '100') ve 150 standart çekim ile başlıyor (yani 150 0.2cc çekim yapıyor). Bu lottan şimdiden iki aşılama çekimi var, bir 0.2cc, diğer 0,3cc). Ve şu andaki 120 miktarı açıkça yanlıştır ve yeniden hesaplamalı ve güncellemeliyiz.
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
);
Ve tabii, Oracle "sağ parantez eksik" şikayet başlar:
İşte benim sorgusu olur. Sözdiziminde yanlış bir şey olduğunu düşünüyor gibi görünüyor.
Herkes bu sorguya bir göz atıp neyin yanlış olduğunu görmesine yardımcı olabilir mi? Teşekkürler!
Bu SQL * aracılığıyla çalıştırdığınızda ne alıyorum ARTI: Bu arada
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
, ben SQL * Plus sürümü 10.2.0.1.0 kullanıyorum. SQL Developer'ı kullanırken aynı sonucu elde ediyorum (3.0.04 sürümü).
Bu konuya bir göz atmanıza yardımcı olan var mı? Teşekkürler!
Tablo tanımlarını ve örnek verilerini gönderdiğiniz için çok teşekkürler! UPDATE ifadenizin beklenen sonucunun ne olacağını açıkça belirtmek de yararlı olacaktır. Ben bir 147 QUANTITY_ON_HAND'ının doğru olduğunu düşünüyorum, ancak kesin olarak sizin sonucun ne olmasını istediğinizden daha iyi biliyorsunuz. –
Kesim ve yapıştırma işleminizde SQL * Plus, bir şey kesiliyor gibi görünüyor. Sorgunuzu ilk başta (ve çalıştırdığımda) 4. satırda fazladan bir 't_id') varsa, bu aslında yoksa, eksik bir parantez hatası alırsınız. –
Bu inanıyorum görüntü sorunu oldu. Sorguyu yeniden biçimlendirdim, böylece hiçbir şey kesilmeyecek (lütfen güncellenen orijinal gönderiye bakın) ve yine de aynı sonucu elde ettim. – Hua