Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

ORA-00933:Lệnh SQL không kết thúc đúng cách khi xóa hai bảng cùng một lúc

Bạn không thể xóa từ hai bảng trong một câu lệnh - không có cách xóa tương đương với insert all . (Trừ khi bạn có các ràng buộc phân tầng việc xóa hoặc một trình kích hoạt thực hiện điều đó theo cách thủ công). Tài liệu cho thấy rằng cú pháp của bạn không hợp lệ, vì không có đường dẫn nào để chỉ định nhiều hơn một bảng.

Bạn sẽ cần có hai câu lệnh xóa, trước tiên hãy xóa các bản ghi khỏi bảng con:

  DELETE FROM login 
  WHERE login.id_user_login = p_id_user;
  DELETE FROM users
  WHERE users.id_user = p_id_user;

Bạn có thể thay đổi ràng buộc khóa ngoại của bạn thành delete cascade :

alter table login add constraint login_fk_user foreign key (id_user_login)
references users(id_user) on delete cascade;

... có nghĩa là bạn sẽ chỉ phải xóa rõ ràng khỏi users bàn; nhưng đó có thể không thực sự là những gì bạn muốn, vì nó loại bỏ một cấp độ xác thực - bạn có thể muốn ngăn khóa cha vô tình bị xóa nếu nó có khóa con. Việc ban hành hai lần xóa không thực sự có hại ở đây.

Ngẫu nhiên, thủ tục đầu tiên của bạn không cam kết, điều mà bạn có thể mong đợi. Trong dòng này:

    ...
    SELECT * FROM DUAL COMMIT;

... COMMIT được hiểu là bí danh cho DUAL bảng, không phải là một lệnh riêng biệt. Bạn sẽ cần dấu chấm phẩy sau DUAL và tốt nhất là một dòng mới cho COMMIT; . Nhưng nó thường được coi là tốt hơn không cam kết trong một thủ tục và cho phép người gọi cấp cao nhất quyết định cam kết hay quay lại để bảo toàn tính toàn vẹn của dữ liệu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lưu trữ tệp TIFF trong Oracle?

  2. Các giá trị được phân tách bằng dấu phẩy cho hàm IN trong oracle

  3. Trình tự ngủ đông trên oracle, @GeneratedValue (chiến lược =GenerationType.AUTO)

  4. Sử dụng Oracle kết hợp ba bảng thành một với PIVOT

  5. Tại sao tôi không thể cập nhật nhiều cột cùng một lúc bằng từ khóa With?