如何从 Oracle APEX 4.2 中的 PL/SQL 进程中调用函数

How do I call a function from within a PL/SQL process within Oracle APEX 4.2

我在我的 Oracle APEX 数据库中创建了一个名为 GET_FILENAME 的新函数。我想从 APEX PL/SQL 代码块中调用此函数并将文件名传递给它。下面是我在我的 APEX 数据库中使用 SQL Dev.

创建的函数
create or replace function get_filename
   (p_path IN VARCHAR2)
   RETURN varchar2

IS
   v_file VARCHAR2(100);

BEGIN

   -- Parse string for UNIX system
   IF INSTR(p_path,'/') > 0 THEN
      v_file := SUBSTR(p_path,(INSTR(p_path,'/',-1,1)+1),length(p_path));

   -- Parse string for Windows system
   ELSIF INSTR(p_path,'\') > 0 THEN
      v_file := SUBSTR(p_path,(INSTR(p_path,'\',-1,1)+1),length(p_path));

   -- If no slashes were found, return the original string
   ELSE
      v_file := p_path;

   END IF;

   RETURN v_file;

END;

事物的 APEX 方面....

下面是我想在调用流程时放入的代码。

TO_DATE(SUBSTR(GET_FILENAME(file_date),21,8),'YYYY-MM-DD') 

下面是顶点过程代码,注释是我想放的地方。

BEGIN

APEX_COLLECTION.ADD_MEMBER
(
        p_collection_name => 'PARSE_COL_HEAD',
        p_c001            => 'C031',
        p_c002            => 'FILE_DATE');

FOR UPLOAD_ROW IN (SELECT SEQ_ID FROM APEX_COLLECTIONS 
                   WHERE COLLECTION_NAME = 'SPREADSHEET_CONTENT')
LOOP

  APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE (
   p_collection_name  => 'SPREADSHEET_CONTENT',
   p_seq              => UPLOAD_ROW.SEQ_ID,
   p_attr_number      => '31',
   p_attr_value       => :P25_FILE_NAME -- I want to call the process here
  ); 

END LOOP;

END;

我通常不回答我自己的问题。但这比我想象的要容易 :)。下面是我用来让它工作的代码....

BEGIN

APEX_COLLECTION.ADD_MEMBER
(
        p_collection_name => 'PARSE_COL_HEAD',
        p_c001            => 'C031',
        p_c002            => 'FILE_DATE');

FOR UPLOAD_ROW IN (SELECT SEQ_ID FROM APEX_COLLECTIONS 
                   WHERE COLLECTION_NAME = 'SPREADSHEET_CONTENT')
LOOP

  APEX_COLLECTION.UPDATE_MEMBER_ATTRIBUTE (
   p_collection_name  => 'SPREADSHEET_CONTENT',
   p_seq              => UPLOAD_ROW.SEQ_ID,
   p_attr_number      => '31',
   p_attr_value       => TO_DATE(SUBSTR(GET_FILENAME(:P25_FILE_NAME),21,8),'YYYY-MM-DD')
  ); 

END LOOP;

END;