SELECT
c.ID AS "REFERENCIA",
c.CIF_NIF AS "CIF",
c.NUMERO_COMERCIO AS "COMERCIO",
CASE
WHEN c.RIESGO_REPUTACIONAL = 1 THEN 'Anexo 2B'
WHEN c.RIESGO_REPUTACIONAL = 3 THEN 'Anexo 2A'
END AS "RIESGO REPUTACIONAL",
tp.NOMBRE AS "TECNOLOGIA",
c.FECHA_INSERCION AS "FECHA CONTRATO",
CASE
WHEN av.FECHA_INSERCION IS NOT NULL THEN TO_CHAR(av.FECHA_INSERCION, 'YYYY-MM-DD HH24:MI:SS')
ELSE 'No se ha validado todavía'
END AS "FECHA VALIDACION",
c.DENOMINACION_COMERCIAL_TICKET AS "DENOMINACION COMERCIAL",
c.COD_SECTOR_ACTIVIDAD_VISAMC AS "CAI",
(SELECT c2.CODIGO FROM CNAE c2 WHERE CONTAINS(c2.LISTA_CAIS, c.COD_SECTOR_ACTIVIDAD_VISAMC, 1) > 0)
FROM
CONTRATO c
LEFT JOIN ANRI_VALORACION av ON
av.ID_CONTRATO = c.ID
INNER JOIN PRODUCTO p ON
c.ID_PRODUCTO = p.ID
INNER JOIN REL_PRODUCTO_TIPOPRODUCTO rpt ON
rpt.ID_PRODUCTO = p.ID
INNER JOIN TIPO_PRODUCTO tp ON
tp.ID = rpt.ID_TIPO_PRODUCTO
WHERE
c.RIESGO_REPUTACIONAL IN (1, 3)
AND c.ESTADO = 'CONTRATO'
AND TO_DATE(c.FECHA_INSERCION) >= ADD_MONTHS(TRUNC(SYSDATE,'MM'),-1)
ORDER BY c.FECHA_INSERCION,c.ID ASC
所以在這里,我的查詢失敗了,它拋出了一個錯誤,比如該列未在該行中編制索引 (SELECT c2.CODIGO FROM CNAE c2 WHERE CONTAINS(c2.LISTA_CAIS, c.COD_SECTOR_ACTIVIDAD_VISAMC, 1) > 0)。我的查詢是在 Oracle 中,可能是什么問題?
uj5u.com熱心網友回復:
看起來您必須將索引創建為
create index i1_cnae_lista on cnae (lista_cais) indextype is ctxsys.context;
另一方面,也許您不想使用 Oracle Text。是contains故意的,還是……?
因為,如果您不需要 Oracle Text,也許這樣的事情會做(即INSTR函式):
SELECT c2.CODIGO FROM CNAE c2
WHERE INSTR (c2.LISTA_CAIS, c.COD_SECTOR_ACTIVIDAD_VISAMC) > 0
uj5u.com熱心網友回復:
“CONTAINS(c2.LISTA_CAIS”) 表示必須在 LISTA_CAIS 列上定義域索引。
查詢 TABLE_NAME = 'CNAE' 的 ALL_INDEXES(假設這是一個表,而不是視圖或同義詞)以查找該表的索引。這也告訴您索引型別,它將告訴您它是否是文本(域)索引。
然后查詢這些索引的 ALL_IND_COLUMNS 以查看為哪些列定義了索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/472538.html
標籤:甲骨文
上一篇:如何使用%字串比較撰寫動態查詢?
下一篇:從程序中獲取資料并顯示在表格中
