P處理的中有大量判斷條件是的sql寫法

來源:互聯網
上載者:User

在執行P處理時需要根據傳經來的參數來寫where條件的時候可能因為,參數太多,或者傳值的範圍太多而導致sql的where條件不好寫。嵌套什麼的都out。

最好的方法是,定義一個變數如: v_strSQL VARCHAR2(20000);然後執行的時候寫:  v_strSQL := 'SELECT FTBL.NENDO, FTBL.NENDO_MEISHO, FTBL.FUKUSHIKI_RENBAN, FTBL.SHIKKO_NO || ''_'' || FTBL.SHIKKO_NO_EDABAN AS SHISHUTSUNO, ' ||
        'CASE FTBL.DATA_SHUBETSU WHEN ''0'' THEN ''歳入'' WHEN ''1'' THEN ''歳出'' WHEN ''3'' THEN ''資産'' WHEN ''4'' THEN ''決算整理'' WHEN ''5'' THEN ''マッチング'' WHEN ''7'' THEN ''連結'' ELSE '''' END AS KBN, ' ||
        'TO_CHAR(TO_DATE(FTBL.SHIKKO_DATE, ''YYYY/MM/DD''), ''YYYY/MM/DD'') AS SHIKKO_DATE, ' ||
        'FTBL.SHUKANKA, FTBL.SHUKANKA_REF.BUMON_MEISHO, ' ||
        'FTBL.SHIKKO_KIKAN, FTBL.SHIKKO_KIKAN_REF.BUMON_MEISHO, ' ||
        'FTBL.KAIKEI, FTBL.KAIKEI_REF.KAIKEI_MEISHO, ' ||
        'NVL(FTBL.TANSHIKI_KAMOKU.KANKOMOKU.KAN, '''') AS KAN, NVL(FTBL.TANSHIKI_KAMOKU.KANKOMOKU.KOU, '''') AS KOU, NVL(FTBL.TANSHIKI_KAMOKU.KANKOMOKU.MOKU, '''') AS MOKU, ' ||
        'NVL(FTBL.TANSHIKI_KAMOKU.JIGYO.JIGYO_DAI, '''') AS DAI, NVL(FTBL.TANSHIKI_KAMOKU.JIGYO.JIGYO_CHU, '''') AS CHU, ' ||
        'NVL(FTBL.TANSHIKI_KAMOKU.JIGYO.JIGYO_SHO, '''') AS SHO, NVL(FTBL.TANSHIKI_KAMOKU.JIGYO.JIGYO_SAI, '''') AS SAI, ' ||
        'NVL(FTBL.TANSHIKI_KAMOKU.SETSU.SETSU, '''') AS SETSU, NVL(FTBL.TANSHIKI_KAMOKU.SETSU.SAISETSU, '''') AS SAISETSU, NVL(FTBL.TANSHIKI_KAMOKU.SETSU.SAISAI, '''') AS SAISAI, ' ||
        'CASE DATA_SHUBETSU WHEN ''0'' THEN NVL(FTBL.SAINYU_KAMOKU_REF.TANSHIKI_MEISHO,'''') WHEN ''1'' THEN NVL(FTBL.SAISHTSU_KAMOKU_REF.TANSHIKI_MEISHO,'''') ELSE '''' END AS KAMOKUMEI, ' ||
        'SWK_NT.KARIKATA.KINGAKU, SWK_NT.REMARKS ' ||
        'FROM FUKUSHIKI_TAB FTBL, TABLE(FTBL.SHIWAKE_DATA) SWK_NT ' ||
        'WHERE FTBL.DATA_SHUBETSU = ''' || wkDataType || ''' AND FTBL.NENDO = ' || wkNendo ||
        ' AND FTBL.SHIKKO_DATE >= ''' || wkShikkoDateFrom || ''' AND FTBL.SHIKKO_DATE <= ''' || wkShikkoDateTo || ''' ';在需要根據參數來寫where的時候:

IF wkDataType = '1' THEN    /* データ種別が歳出の場合のみ */
    IF wkDaiJigyo != '00' THEN    /* 大事業 */
      v_strSQL := v_strSQL || 'AND FTBL.SAISHTSU_DAI_JIGYO_REF.HYOJI_TANSHIKI.JIGYO.JIGYO_DAI = ''' || wkDaiJigyo || ''' ';
    END IF;
    IF wkChuJigyo != '00' THEN    /* 中事業 */
      v_strSQL := v_strSQL || 'AND FTBL.SAISHTSU_CHU_JIGYO_REF.HYOJI_TANSHIKI.JIGYO.JIGYO_CHU = ''' || wkChuJigyo || ''' ';
    END IF;
    IF wkShoJigyo != '00' THEN    /* 小事業 */
      v_strSQL := v_strSQL || 'AND FTBL.SAISHTSU_SHO_JIGYO_REF.HYOJI_TANSHIKI.JIGYO.JIGYO_SHO = ''' || wkShoJigyo || ''' ';
    END IF;
    IF wkSaiJigyo != '00' THEN    /* 細事業 */
      v_strSQL := v_strSQL || 'AND FTBL.SAISHTSU_SAI_JIGYO_REF.HYOJI_TANSHIKI.JIGYO.JIGYO_SAI = ''' || wkSaiJigyo || ''' ';
    END IF;
  END IF;

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.