Получить все XML имена файлов из каталога в процедуре PL / SQL - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть процедура, которая берет имя файла XML, которое находится в каталоге локального сервера, и извлекает нужные данные в таблицу oracle. Новые XML файлы постоянно добавляются в этот каталог. Я хотел бы автоматизировать процесс и получить все имена файлов для моей процедуры, чтобы данные автоматически вносились в таблицы.

Ниже приведен мой код, может ли кто-нибудь подсказать, как можно автоматизировать процесс.


DECLARE

acct_doc xmltype := xmltype( bfilename('AUTOACCEPT_XMLDIR','HighSchoolTranscript 20191202173006-1.xml'), nls_charset_id('AL32UTF8') );  -- Change the file name to get different students

BEGIN

 insert into s7303786.syvhscs (syvhscs_code, syvhscs_crse_title, syvhscs_hsct_code, syvhscs_credit_hours, syvhscs_hspt_code, syvhscs_level, syvhscs_end_date, syvhscs_smu_accept, syvhscs_hsag_code, syvhscs_user_id, syvhscs_activity_date)
 select z.syvhscs_code
     , z.syvhscs_crse_title
     , SUBSTR(z.syvhscs_hsct_code, -2,1) AS syvhscs_hsct_code   -- Extracted from AgencyCourseID
     , z.syvhscs_credit_hours                                   
     , SUBSTR(z.syvhscs_hspt_code, -1) AS syvhscs_hspt_code     -- Etracted from AgencyCourseID
     , REGEXP_SUBSTR(z.syvhscs_level, '(\d)(\d)')               --Extracted from CourseTitle (two digit number)
     , z.syvhscs_end_date
     , z.syvhscs_smu_accept
     , x.syvhscs_hsag_code
     , y.syvhscs_user_id
     , x.syvhscs_activity_date
 from XMLTable(
       xmlnamespaces('urn:org:pesc:message:HighSchoolTranscript:v1.5.0' as "HSTrn"), -- remove if you don't have XMLNAMESPACE in the root node
       '/HSTrn:HighSchoolTranscript'  --  root node name
       passing acct_doc

       columns
           syvhscs_hsag_code     varchar2(100)              path  'TransmissionData/Source/Organization/PSIS'
         , syvhscs_activity_date timestamp with time zone   path  'TransmissionData/CreatedDateTime'
         -- other columns
         , student               xmltype                    path  'Student'

   ) x
   , xmltable(
       '/Student'
       passing x.student
       columns
          syvhscs_user_id       varchar2(100) path  'Person/RecipientAssignedID'
          -- other columns
          , course                xmltype       path  'AcademicRecord/AcademicSession/Course'
   ) y
   , XMLTable(
       '/Course'
       passing y.course
       columns
         syvhscs_code         varchar2(100) path  'AgencyCourseID',
         syvhscs_crse_title   varchar2(100) path  'CourseTitle',
         syvhscs_hsct_code    varchar2(100) path  'AgencyCourseID',
         syvhscs_credit_hours number        path  'CourseCreditValue',
         syvhscs_hspt_code    varchar2(100) path  'AgencyCourseID',
         syvhscs_level        varchar2(100) path  'CourseTitle',
         syvhscs_end_date     timestamp     path  'CourseEndDate',
         syvhscs_smu_accept   varchar2(100) path  'AgencyCourseID'
   ) z;

END;

1 Ответ

0 голосов
/ 20 февраля 2020

Я не хочу сейчас программировать весь процесс для вас. но вот мое предложение, как вы можете это сделать

  • сначала вам нужна функциональность для чтения всех файлов в каталоге, проверьте статью на asktom

  • Далее вы можете реализовать процедуру, которая вызывает эту функцию java и выполнять итерацию по результату.

  • в l oop вы можете вызывать для каждого файла вашу процедуру, которая разбирает ваши xml файлы

  • Если вам, что автоматизировать процесс, вы можете создать задание планировщика в базе данных. просто проверьте вопрос и ответы здесь на SO:

Надеюсь, я ничего не забыл

...