1

ファイル パスを指定すると、Oracle PL/SQL でファイル名と親ディレクトリを分離しようとしています。PL/SQLライブラリで使用可能な関数がすでに存在するかどうか疑問に思っています

4

2 に答える 2

3

実際の必要性はありません。10g 以降を使用している場合は、OS によっては次のように、正規表現を少し調整するだけで済みます。

with filepaths as (
  select '/home/oracle/somedir/blah.sql' as linux
       , 'c:\home\oracle\somedir\blah.sql' as windows
    from dual
         )
select regexp_substr(linux, '[^/]+', 1
                     , regexp_count(linux,'/')) as linux
     , regexp_substr(windows, '[^\]+', 1
                     , regexp_count(windows,'[^\]+')) as windows
  from filepaths
       ;

LINUX    WINDOWS
-------- --------
blah.sql blah.sql
于 2012-08-09T17:08:48.167 に答える
1

次のように、INSTR および SUBSTR 文字列関数を使用してこれを行うことができます。

WITH filepaths AS
  (SELECT '/home/oracle/somedir/blah.sql' AS LINUX,
          'c:\home\oracle\somedir\blah.sql' AS WINDOWS
     FROM DUAL)
SELECT LINUX,
       SUBSTR(LINUX, 1, INSTR(LINUX, '/', -1)) AS LINUX_PATH,
       SUBSTR(LINUX, INSTR(LINUX, '/', -1)+1) AS LINUX_FILE,
       WINDOWS,
       SUBSTR(WINDOWS, 1, INSTR(WINDOWS, '\', -1)) AS WINDOWS_PATH,
       SUBSTR(WINDOWS, INSTR(WINDOWS, '\', -1)+1) AS WINDOWS_FILE
FROM filepaths;

LINUX         /home/oracle/somedir/blah.sql
LINUX_PATH    /home/oracle/somedir/
LINUX_FILE    blah.sql
WINDOWS       c:\home\oracle\somedir\blah.sql
WINDOWS_PATH  c:\home\oracle\somedir\
WINDOWS_FILE  blah.sql

共有してお楽しみください。

于 2012-08-10T17:01:13.483 に答える