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

dbms_metadata.get_ddl không hoạt động

Từ dbms_metadata tài liệu:

Nếu người dùng không có đặc quyền được cấp một số hình thức truy cập vào một đối tượng trong giản đồ của người khác, họ sẽ có thể truy xuất đặc tả cấp thông qua API siêu dữ liệu, nhưng không phải siêu dữ liệu thực tế của đối tượng.

Vì vậy, trừ khi bạn được kết nối với tư cách là người dùng đặc quyền, bạn không thể xem DDL cho các đối tượng của người dùng khác. Bạn cần kết nối với tên SYS hoặc có SELECT_CATALOG_ROLE vai trò được cấp cho người dùng của bạn để có thể lấy định nghĩa đối tượng của XT.

Ngay cả với vai trò đó:

Trong các thủ tục, hàm và gói quyền định nghĩa được lưu trữ, các vai trò (chẳng hạn như SELECT_CATALOG_ROLE) bị vô hiệu hóa. Do đó, một chương trình PL / SQL như vậy chỉ có thể tìm nạp siêu dữ liệu cho các đối tượng trong lược đồ của chính nó. Nếu bạn muốn viết một chương trình PL / SQL tìm nạp siêu dữ liệu cho các đối tượng trong một lược đồ khác (dựa trên quyền sở hữu của kẻ xâm lược là SELECT_CATALOG_ROLE), bạn phải tạo quyền đối với chương trình.

Nếu bạn đang gọi dbms_metadata từ một khối PL / SQL ẩn danh không quan trọng, nhưng nếu bạn đang gọi nó từ một thủ tục, bạn sẽ phải bao gồm một AUTHID trong khai báo thủ tục, thêm AUTHID CURRENT_USER .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm tra bảng tồn tại hay không trước khi tạo nó trong Oracle

  2. Lỗi tắt máy Oracle ORA-01033

  3. Nhận tên tháng kể từ ngày trong Oracle

  4. 6 cách để xóa các dòng trùng lặp có khóa chính trong Oracle

  5. Làm thế nào để chọn top 1 và sắp xếp theo ngày trong Oracle SQL?