如何在Oracle APEX 4.2中的PL / SQL过程中调用函数

时间:2015-11-10 21:12:23

标签: oracle function plsql oracle-apex

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

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;

1 个答案:

答案 0 :(得分:1)

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

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;