Câu trả lời là PL/SQL không hỗ trợ đa hình động. nó chỉ hỗ trợ đa hình tĩnh vì
Tất cả các tướng PL/SQL là "DIANA" -> Ký hiệu phân bổ trung gian mô tả cho Ada, một ngôn ngữ trung gian có cấu trúc cây. DIANA được sử dụng trong nội bộ bởi trình biên dịch.
Tại thời gian biên dịch, mã nguồn PL/SQL được dịch sang mã hệ thống và tạo DIANA tương ứng. Bây giờ hãy nghĩ rằng nếu có một câu lệnh DDL như tạo câu lệnh bảng tại thời điểm biên dịch không tồn tại thì nó sẽ được tạo sau khi chạy chương trình. làm thế nào PL/SQL của bạn sẽ tạo ra một DIANA sau đó ????
DIANA đóng một vai trò quan trọng trong PL/SQL để kiểm tra/xác thực rằng chương trình con. điều này là bắt buộc bởi vì như chúng ta biết rằng một chương trình con có thể sử dụng các đối tượng cơ sở dữ liệu như Tables, Views, Synonyms hoặc procs được lưu trữ khác. có thể là các đối tượng có thể đã thay đổi/xóa/thả khi lần sau bạn chạy chương trình. Ví dụ: một số có thể đã thả bảng, proc được lưu trữ hoặc chức năng singnature có thể đã thay đổi.
Thats lý do tại sao PL/SQL thường được sử dụng để thao tác dữ liệu trong cấu trúc cơ sở dữ liệu, nhưng không thao túng các cấu trúc đó.
nhưng có nhiều cách để thao tác sử dụng gói SQL động và DBMS_SQL nhưng phương pháp luận này lại được sử dụng một cách thận trọng. Ví dụ: nếu bạn đang tạo Bảng, bạn nên kiểm tra trước nếu bảng này đã tồn tại hoặc không sử dụng chế độ xem từ điển dữ liệu.
Không tham chiếu đến suy nghĩ của nhóm thiết kế PL/SQL, tôi không nghĩ rằng chúng tôi có thể biết ** tại sao PL/SQL không cho phép DDL tĩnh. Chúng ta chỉ có thể thảo luận về điểm cộng và nhược điểm của cách tiếp cận và sẽ không có câu trả lời là ** câu trả lời **. –
Tôi nghĩ rằng các câu trả lời cho đến nay chứng minh câu hỏi này là câu trả lời, được hỗ trợ bởi các sự kiện - và có thể xây dựng là tốt. –
Jeffrey Kemp là chính xác, câu trả lời được chấp thuận cho thấy rằng câu hỏi này không nên được đóng lại - như rất nhiều người khác trên trang web, thật đáng buồn. –