Tôi đang sử dụng 10g và đang cố thực hiện một số phép tính đơn giản và sau đó lưu kết quả vào cột. Các bảng thực tế có nhiều cột hơn, nhưng dưới đây là những gì tôi đang sử dụng trong truy vấn của mình:(Còn cách khác) "Thiếu dấu ngoặc đơn phải"
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);
Ảnh chủng ngừa được lấy từ lô vaccin. 'Dose_magnitude' là liều tiêm chủng đặc biệt sử dụng rất nhiều. Cột 'Liều' trong vaccin_lot cho biết cần sử dụng bao nhiêu cho tiêm chủng ngừa tiêu chuẩn. Vì vậy, một shot tiêu chuẩn có thể là 0.1cc. Nhưng một tiêm chủng ngừa có thể thực sự sử dụng 0.2cc hoặc thậm chí 0.05cc. Cột 'Số lượng' trong hồ sơ vaccin_lot_transaction ban đầu có bao nhiêu mũi tiêm chủng ngừa tiêu chuẩn mà lô vaccin chứa đựng.
Những gì tôi đang cố gắng làm ở đây là tính toán chính xác 'Số lượng_hand_hand' cho lô vaccin (có nghĩa là, còn bao nhiêu mũi chích ngừa tiêu chuẩn còn lại cho lô vaccin).
Dưới đây là ví dụ sử dụng dữ liệu chúng tôi vừa chèn vào. Chúng tôi có một lô vaccin (ID lô là '100'), và nó bắt đầu với 150 mũi chích ngừa tiêu chuẩn (có nghĩa là, nó chứa 150 bức ảnh 0.2cc). Có hai mũi chích ngừa tiêm chủng từ lô này, một liều 0.2cc, 0.3cc khác). Và số lượng hiện tại là 120 rõ ràng là sai, và chúng ta cần phải tính toán lại và cập nhật nó.
Đây là câu hỏi của tôi:
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
);
Và chắc chắn đủ, Oracle bắt đầu phàn nàn về "ngoặc đúng mất tích". Có vẻ như nó nghĩ có cái gì đó sai về mặt cú pháp.
Có ai có thể xem xét truy vấn này và xem có vấn đề gì không? Cảm ơn!
Đây là những gì tôi nhận được khi tôi chạy nó thông qua 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
Bằng cách này, tôi đang sử dụng phiên bản 10.2.0.1.0 của SQL * Plus. Tôi nhận được kết quả tương tự khi sử dụng SQL Developer (phiên bản 3.0.04).
Có ai có thể xem xét vấn đề này không? Cảm ơn!
Cảm ơn bạn rất nhiều vì đã đăng các định nghĩa bảng và dữ liệu mẫu! Nó cũng sẽ hữu ích để tuyên bố rõ ràng kết quả mong đợi của câu lệnh 'UPDATE' của bạn là gì. Tôi nghĩ rằng một 'QUANTITY_ON_HAND' của 147,5 là chính xác nhưng bạn rõ ràng biết rõ hơn tôi những gì bạn muốn kết quả được. –
Trong phần cắt và dán của bạn từ SQL * Plus, có vẻ như một cái gì đó đang bị cắt. Khi bạn đăng truy vấn của bạn ban đầu (và khi tôi chạy nó) có thêm 't_id) -' trên dòng 4. Nếu điều đó không thực sự ở đó, bạn sẽ nhận được một dấu ngoặc đơn thiếu. –
Đó là vấn đề hiển thị tôi tin. Tôi đã định dạng lại truy vấn để không có gì bị cắt bỏ (vui lòng xem bài đăng gốc của tôi, đã được cập nhật) và tôi vẫn kết thúc với cùng một kết quả. – Hua