2017-04-25 8 views
-2

この条件では、ユーザーはスケジュールで訪問できます。私は、ロジックを持つOracleデータベース内の関数を作成する方法 は以下のとおりです。現在の日付を表示するデータベースの機能

  • 1ヶ月の訪問(F1)の訪問(F2)一度
  • 2月に訪問一回(F4)
  • 一週間に一度
  • 1週間に2回訪問(f8)。

したがって、現在の日付のデータをその条件に合わせて表示できます。テーブル名とデータベース内

例mst_callplanある:

cust_no : 201, sales_no:001, frequent: f1, day: monday  
cust_no : 202, sales_no:001, frequent: f8, day: friday 
cust_no : 203, sales_no:001, frequent: f2, day: wednesday 
cust_no : 204, sales_no:001, frequent: f1, day: monday 

CUST_NO、sales_no、頻繁に、その日は、列の名前です。

Fromデータベースは、現在の日付でその条件に適合するテーブルの行を表示します。現在の日付が変更されたときにデータが自動的に表示されます。例えば、結果については

は以下のとおりです(この現在の日付用:25/04/2017)ヌル

、データベース内の機能のために私を助けて。その条件に合った関数を作成する方法。その場合に

+0

サンプルデータに基づいて、いくつかのサンプルデータを、予想される関数呼び出し、次に期待される出力を与えます。 – Utsav

+1

投稿を編集して、テーブルのDDLとDMLステートメントとその問題を説明するサンプルデータを提供し、問題の解決を試みるコード、誤った箇所と予想される箇所を含めてください。 StackOverflowは**コード作成サービスではありません**。 – MT0

+1

あなたの嘆願を言い換えるだけで、あなたが望むものを説明することと同じではありません。 4つのルールすべてを満たすための十分なサンプルデータを提供し、異なる日付に返される行とその理由を表示してください。多くの人があなたのためのコードを書こうと苦労していますが、彼らはあなたの要件をはっきりと説明すればそうすることができます。 – APC

答えて

0

関数である:

 FUNCTION get_data_sales(pi_trxn_dt IN DATE) 
     RETURN slm_type_mst_callplan_tab IS 

    l_slm_type_mst_callplan_rec slm_type_mst_callplan_rec; 
    l_slm_type_mst_callplan_tab slm_type_mst_callplan_tab := slm_type_mst_callplan_tab(); 

    l_return PLS_INTEGER; 

    ex_set_date_lang EXCEPTION; 

    CURSOR cur_data IS 
     SELECT cust_id 
      ,sales_id 
      ,mst_freq 
      ,mst_day 
      ,start_date 
      ,end_date 
      ,week_no 
     FROM mst_callplan 
     WHERE (upper(mst_freq) = 'F1' and week_no=4 AND 
      MOD(slm_pkg_utl.cnt_week(pi_start_dt => g_start_dt 
            ,pi_end_dt => pi_trxn_dt) 
       ,4) = 0 AND upper(TRIM(mst_day)) = 
      upper(TRIM(to_char(pi_trxn_dt,'Day')))) 

      OR 
      (upper(mst_freq) = 'F1'and week_no=3 AND 
      MOD(slm_pkg_utl.cnt_week(pi_start_dt => g_start_dt 
            ,pi_end_dt => pi_trxn_dt) 
       ,4) = 3 AND upper(TRIM(mst_day)) = 
      upper(TRIM(to_char(pi_trxn_dt,'Day')))) 

      OR 
      (upper(mst_freq) = 'F1'and week_no=2 AND 
      MOD(slm_pkg_utl.cnt_week(pi_start_dt => g_start_dt 
            ,pi_end_dt => pi_trxn_dt) 
       ,4) = 2 AND upper(TRIM(mst_day)) = 
      upper(TRIM(to_char(pi_trxn_dt,'Day')))) 

      OR 
      (upper(mst_freq) = 'F1'and week_no=1 AND 
      MOD(slm_pkg_utl.cnt_week(pi_start_dt => g_start_dt 
            ,pi_end_dt => pi_trxn_dt) 
       ,4) = 1 AND upper(TRIM(mst_day)) = 
      upper(TRIM(to_char(pi_trxn_dt,'Day')))) 

      OR 
      (upper(mst_freq) = 'F2' and week_no=2 AND 
      MOD(slm_pkg_utl.cnt_week(pi_start_dt => g_start_dt 
            ,pi_end_dt => pi_trxn_dt) 
       ,2) = 0 AND upper(TRIM(mst_day)) = 
      upper(TRIM(to_char(pi_trxn_dt 
               ,'Day')))) 
      OR 
      (upper(mst_freq) = 'F2' and week_no=1 AND 
      MOD(slm_pkg_utl.cnt_week(pi_start_dt => g_start_dt 
            ,pi_end_dt => pi_trxn_dt) 
       ,2) = 1 AND upper(TRIM(mst_day)) = 
      upper(TRIM(to_char(pi_trxn_dt,'Day')))) 

      OR (upper(mst_freq) = 'F4' AND 
      upper(TRIM(mst_day)) = 
      upper(TRIM(to_char(pi_trxn_dt 
            ,'Day')))) 
      OR (upper(mst_freq) = 'F8' AND 
      upper(TRIM(mst_day)) = 
      upper(TRIM(to_char(pi_trxn_dt 
            ,'Day')))); 

    BEGIN 
    set_date_language(po_return => l_return); 
    IF l_return <> 0 THEN 
     RAISE ex_set_date_lang; 
    END IF; 

    FOR rec_dt IN cur_data 
    LOOP 
     l_slm_type_mst_callplan_tab.extend; 
     l_slm_type_mst_callplan_tab(l_slm_type_mst_callplan_tab.last) := slm_type_mst_callplan_rec(rec_dt.cust_id 
                           ,rec_dt.sales_id 
                           ,rec_dt.mst_freq 
                           ,rec_dt.mst_day 
                           ,rec_dt.start_date 
                           ,rec_dt.end_date 
                           ,rec_dt.week_no); 

    END LOOP; 
    RETURN l_slm_type_mst_callplan_tab; 
    EXCEPTION 
    WHEN ex_set_date_lang THEN 
     dbms_output.put_line('Error set date languange'); 
    WHEN OTHERS THEN 
     l_slm_type_mst_callplan_tab.delete; 
    END get_data_sales; 
+0

あなたの質問を編集して、質問にコードスニペットを投稿してください。 – user75ponic

関連する問題