oracle 捕獲異常,不中斷游標循環


2016-04-20

昨天晚上,在用全文索引匹配關鍵詞列表,進行查詢時,不斷報錯。oracle的全文索引對關鍵字有很多的限制,為了能夠正常查詢出數據,得找出有問題的關鍵詞。因為關鍵詞列表有3000多個,一個個去檢查是否有語法錯誤不太現實,而且工作量也大,所以想到用存儲過程去捕獲查詢時的異常,並在有異常的地方,把有問題的關鍵詞輸出。以下是用到的過程。

CREATE OR REPLACE PROCEDURE sp_etl_pc_tmp_ms_201504_10 as

  v_ms gather.tmp_ms_201504_10_test%ROWTYPE;
  TYPE cur_type is REF CURSOR;
  c_tab       cur_type;
  v_sql       varchar2(4000);
  v_str       varchar2(250);
  v_startdate date;
  v_enddate   date;

BEGIN
  v_sql       := 'select * from gather.web_action_basic a
                 where contains(a.windows, :v1,0) > 0
             and a.day_date between :v2 and :v3 ';
  v_startdate := to_date('2015-04-01', 'YYYY-MM-DD');
  v_enddate   := to_date('2015-04-02', 'YYYY-MM-DD');
  FOR i IN (SELECT * FROM gather.keyword_ms_ap WHERE proj_name = 'Microsoft') LOOP
    BEGIN
      v_str := i.keywords;
      OPEN c_tab FOR v_sql
        USING v_str, v_startdate, v_enddate;
    
      LOOP
        FETCH c_tab
          INTO v_ms;
        EXIT WHEN c_tab%NOTFOUND;
        NULL;
      END LOOP;
      CLOSE c_tab;
    
    EXCEPTION
      WHEN others THEN
        dbms_output.put_line('keywords = ' || v_str);
    END;
  END LOOP;
END;

測試腳本跑完,找出了一個有問題的關鍵詞,如下:

豎線|在oracle中代表字符串連接,在用全文索引進行模糊查詢時,如果作為關鍵字,則缺失右表達式,所以不斷報錯。

因為剛接觸過程不久,不太熟悉,這樣一個小問題搞了我一個上午。這也算是我第一個跟業務相關的過程吧,在此紀念一下。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM