oracle中對LONG列進行查詢

來源:互聯網
上載者:User

標籤:

SQL> CREATE TABLE T_LONG (ID NUMBER, LONG_COL LONG);
  表已建立。
  SQL> INSERT INTO T_LONG VALUES (1, LPAD(1, 32767, ’HELLO WORLD!’));
  已建立 1 行。
  SQL> COMMIT;
  提交完成。
  SQL> SELECT * FROM T_LONG WHERE LONG_COL LIKE ’%WORLD%’
  2 ;
  SELECT * FROM T_LONG WHERE LONG_COL LIKE ’%WORLD%’
  *第 1 行出現錯誤:
  ORA-00932: 資料類型不一致: 應為 NUMBER, 但卻獲得 LONG
  根據Oracle的建議,應該避免再使用LONG類型。如果可能應該使用TO_LOB來重建表,將表中的LONG類型轉化為CLOB或BLOB類型。
  這裡就不考慮這種方法了,只是討論一下對於不能重建的表如何進行查詢。
  如果表中的資料長度不超過32K的話,可以考慮通過類似下面的PL/SQL代碼來實現:
  SQL> SET SERVEROUT ON
  SQL> BEGIN
  2 FOR I IN (SELECT * FROM T_LONG) LOOP
  3 IF INSTR(I.LONG_COL, ’WORLD’) > 0 THEN
  4 DBMS_OUTPUT.PUT_LINE(I.ID);
  5 END IF;
  6 END LOOP;
  7 END;
  8 /
  1
  PL/SQL 過程已成功完成。
  不過PL/SQL代碼只能處理不超過32K的資料,超過這個限制,就無法通過PL/SQL來處理。
  好在Oracle的全文索引是支援LONG類型的,建立一個CONTEXT索引,使用全文索引的查詢文法就可以解決這個問題:
  SQL> CREATE INDEX IND_T_LONG_COL ON T_LONG(LONG_COL) INDEXTYPE IS CTXSYS.CONTEXT;
  索引已建立。
  SQL> SELECT ID FROM T_LONG WHERE CONTAINS(LONG_COL, ’WORLD’) > 0;
  ID
  ----------
  1

 

oracle中對LONG列進行查詢

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.