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

Thủ tục UTL_FILE.FOPEN () không chấp nhận đường dẫn cho thư mục?

Kể từ Oracle 9i, có hai cách hoặc khai báo một thư mục để sử dụng với UTL_FILE.

Cách cũ hơn là đặt tham số INIT.ORA UTL_FILE_DIR. Chúng tôi phải khởi động lại cơ sở dữ liệu để thay đổi có ảnh hưởng. Giá trị có thể giống như bất kỳ biến PATH nào khác; nó chấp nhận các ký tự đại diện. Sử dụng phương pháp này có nghĩa là chuyển đường dẫn thư mục ...

UTL_FILE.FOPEN('c:\temp', 'vineet.txt', 'W');

Cách tiếp cận thay thế là khai báo một đối tượng thư mục.

create or replace directory temp_dir as 'C:\temp'
/

grant read, write on directory temp_dir to vineet
/

Các đối tượng thư mục yêu cầu đường dẫn tệp chính xác và không chấp nhận các ký tự đại diện. Trong cách tiếp cận này, chúng tôi chuyển tên đối tượng thư mục ...

UTL_FILE.FOPEN('TEMP_DIR', 'vineet.txt', 'W');

UTL_FILE_DIR không được dùng nữa vì nó vốn không an toàn - tất cả người dùng đều có quyền truy cập vào tất cả các thư mục OS được chỉ định trong đường dẫn, trong khi đặc quyền đọc và ghi có thể được cấp riêng cho người dùng cá nhân. Ngoài ra, với các đối tượng Thư mục, chúng ta có thể thêm, xóa hoặc thay đổi thư mục mà không bị trả lại cơ sở dữ liệu.

Trong cả hai trường hợp, oracle Người dùng hệ điều hành phải có đặc quyền đọc và / hoặc ghi trên thư mục hệ điều hành . Trong trường hợp không rõ ràng, điều này có nghĩa là thư mục phải hiển thị từ máy chủ cơ sở dữ liệu . Vì vậy, chúng tôi không thể sử dụng một trong hai cách tiếp cận để hiển thị một thư mục trên PC cục bộ của chúng tôi với một quy trình đang chạy trên máy chủ cơ sở dữ liệu từ xa. Các tệp phải được tải lên máy chủ cơ sở dữ liệu hoặc ổ đĩa mạng được chia sẻ.

Nếu oracle Người dùng hệ điều hành không có các đặc quyền thích hợp trên thư mục hệ điều hành hoặc nếu đường dẫn được chỉ định trong cơ sở dữ liệu không khớp với đường dẫn thực, chương trình sẽ bỏ qua ngoại lệ này:

ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 7

Văn bản OERR cho lỗi này khá rõ ràng:

29283 -  "invalid file operation"
*Cause:    An attempt was made to read from a file or directory that does
           not exist, or file or directory access was denied by the
           operating system.
*Action:   Verify file and directory access privileges on the file system,
           and if reading, verify that the file exists.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao trong SQL NULL không thể khớp với NULL?

  2. Lỗi cài đặt máy khách Oracle - đường dẫn quá dài

  3. SQL chọn hàng theo ngày gần đây nhất với hai cột duy nhất

  4. CSV trong nhà phát triển SQL…

  5. Cơ sở dữ liệu Oracle 20c Các tính năng mới