簡體   English   中英

無法從過程調用中獲取函數值?

[英]unable to get the function value from procedure call?

我制作了一個包,其中定義了一個過程來調用函數,並編寫了一個函數來返回 varchar2 值,但我無法做到這一點,不確定為什么我無法做到這一點。 更多關於函數返回值,即LP_WHERE_REP 應該在xml 發布者報告查詢中使用,以便根據所選參數的場景將條件添加到where 子句中 p_module & p_processing_status 是參數。

CREATE OR REPLACE PACKAGE XXMTZ_WO_STG_REP_TRI_TEST AS  -- package spec
p_datasource          VARCHAR2 (40);
p_module              VARCHAR2 (10);
p_processing_status   VARCHAR2 (5);
LP_REP_WHERE VARCHAR2(4000):= NULL;
data_source XXMTZ_AT_AR_WO_STG_TBL.data_source %type;
  PROCEDURE PROC_TO_CALL_FUNCTION;
  FUNCTION BEFORE_REPORT RETURN VARCHAR2;
END XXMTZ_WO_STG_REP_TRI_TEST;
/


CREATE OR REPLACE PACKAGE BODY XXMTZ_WO_STG_REP_TRI_TEST AS  -- package body
  PROCEDURE PROC_TO_CALL_FUNCTION
  IS
    bValue  VARCHAR2(4000);
  BEGIN
    dbms_output.put_line('Entered the Procedure');
    bValue := XXMTZ_WO_STG_REP_TRI_TEST.BEFORE_REPORT;
    dbms_output.put_line('procedure end');
  END PROC_TO_CALL_FUNCTION;

  FUNCTION BEFORE_REPORT
      RETURN VARCHAR2
  IS
  BEGIN

    -- function body goes here
    IF     data_source = p_datasource --- p_data_source is parameter value & datasource is table column
         AND p_module = 'AP'
         AND p_processing_status = 'Processed'
      THEN
          LP_REP_WHERE := 'd_process_flag = ''P'' AND d_ap_flag = ''P''';
      ELSIF     data_source = p_datasource
            AND p_module = 'AP'
            AND p_processing_status = 'Un Processed'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''P'' AND d_ap_flag = ''Y''';
      ELSIF     data_source = p_datasource
            AND p_module = 'AP'
            AND p_processing_status = 'ERROR'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''P'' AND d_ap_flag = ''E''';
      ELSIF     data_source = p_datasource
            AND p_module = 'AP'
            AND p_processing_status = 'DELETED'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''R''';
      ELSIF     data_source = p_datasource
            AND p_module = 'AR'
            AND p_processing_status = 'Processed'
      THEN

         LP_REP_WHERE := 'd_process_flag = ''P'' AND d_ar_flag = ''P''';
      ELSIF     data_source = p_datasource
            AND p_module = 'AR'
            AND p_processing_status = 'Un Processed'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''P'' AND d_ar_flag = ''Y''';
      ELSIF     data_source = p_datasource
            AND p_module = 'AR'
            AND p_processing_status = 'ERROR'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''P'' AND d_ar_flag = ''E''';
      ELSIF     data_source = p_datasource
            AND p_module = 'AR'
            AND p_processing_status = 'DELETED'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''R''';
      ELSIF     data_source = p_datasource
            AND p_module = 'MTE'
            AND p_processing_status = 'Processed'
      THEN

         LP_REP_WHERE := 'd_process_flag = ''P'' AND d_mte_flag = ''P''';
      ELSIF     data_source = p_datasource
            AND p_module = 'MTE'
            AND p_processing_status = 'Un Processed'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''P'' AND d_mte_flag = ''Y''';
      ELSIF     data_source = p_datasource
            AND p_module = 'MTE'
            AND p_processing_status = 'ERROR'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''P'' AND d_mte_flag = ''E''';
      ELSIF     data_source = p_datasource
            AND p_module = 'MTE'
            AND p_processing_status = 'DELETED'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''R''';
      ELSIF     data_source = p_datasource
            AND p_module = 'Pre Interface'
            AND p_processing_status = 'Processed'
      THEN

         LP_REP_WHERE := 'd_process_flag = ''P''';
      ELSIF     data_source = p_datasource
            AND p_module = 'Pre Interface'
            AND p_processing_status = 'Un Processed'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''N''';
      ELSIF     data_source = p_datasource
            AND p_module = 'Pre Interface'
            AND p_processing_status = 'ERROR'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''E''';
      ELSIF     data_source = p_datasource
            AND p_module = 'Pre Interface'
            AND p_processing_status = 'DELETED'
      THEN
         LP_REP_WHERE := 'd_process_flag = ''R''';
      END IF;

           fnd_file.put_line (fnd_file.LOG, 'EXIT of IF Block');

    RETURN LP_REP_WHERE;

  END BEFORE_REPORT;
END XXMTZ_WO_STG_REP_TRI_TEST;
/

函數使用變量,例如data_sourcep_datasourcep_module ,...但它們沒有被初始化,所以它們的值為空。 這就是該函數不返回任何內容(即NULL )的原因。

也許您的過程應該接受這些參數並將它們傳遞給函數,例如

procedure (p_datasource in varchar2, p_module in varchar2) is
begin
  l_where := function (p_datasource, p_module);
end;

function (p_datasource in varchar2, p_module in varchar2)
  return varchar2;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM