Каков эквивалентный синтаксис для предоставления Java, работающей во встроенной Oracle JVM, каталогу Oracle по имени?

#java #database #oracle #plsql

#java #База данных #Oracle #plsql

Вопрос:

Чтобы предоставить java-код, который выполняется внутри Oracle JVM, встроенной в СУБД 10g, в определенный каталог на диске, я могу выполнить:

 dbms_java.grant_permission( 
        'SCOTT', 
        'SYS:java.io.FilePermission', 
        '/some/path/on/disk', 
         'read');
  

Каков эквивалентный синтаксис для предоставления Java-коду, работающему внутри Oracle JVM, встроенной в СУБД 10g, каталога Oracle по имени?

 dbms_java.grant_permission( 'SCOTT', 
 'SYS:java.io.FilePermission', 
 'SOME_DIRECTORY_IN_ALL_DIRECTORIES_VIEW', 
 'read');
  

Объекты каталога можно найти здесь:
выберите * из all_directories

Примеры записей в представлении all_directories:

 OWNER   DIRECTORY_NAME    DIRECTORY_PATH
SYS     LOG               /export/home/scott/log
SYS     RESPONSE          /export/home/scott/response
SYS     STAGING           /export/home/scott/staging
  

Если есть такой зверь, каков синтаксис для чтения из именованного каталога в коде Java?

Ответ №1:

Основываясь на том, что я прочитал в этом вопросе AskTom, вам понадобится что-то вроде:

 SELECT directory_path INTO v_path
  FROM all_directories
 WHERE directory_name = '<oracle_dir_name>';

dbms_java.grant_permission( 'SCOTT', 
 'SYS:java.io.FilePermission', 
 v_path, 
 'read');
  

Комментарии:

1. Понятно. Я сделал это, и это, казалось, противоречило всей идее объектов каталога.