Oracle Text error: DRG-10599: the colum is not indexed
Oracle Text error: DRG-10599: the colum is not indexed
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 中,可能是什么问题?
"CONTAINS(c2.LISTA_CAIS" 表示必须在 LISTA_CAIS 列上定义 domain 索引。
查询 ALL_INDEXES 以获得 TABLE_NAME = 'CNAE'(假设这是一个 table,而不是视图或同义词)以找到 [=24= 的索引].这还会告诉您索引类型,这将告诉您它是否是文本(域)索引。
然后查询 ALL_IND_COLUMNS 这些索引以查看为哪些列定义了索引。
看来您必须将索引创建为
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
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 中,可能是什么问题?
"CONTAINS(c2.LISTA_CAIS" 表示必须在 LISTA_CAIS 列上定义 domain 索引。
查询 ALL_INDEXES 以获得 TABLE_NAME = 'CNAE'(假设这是一个 table,而不是视图或同义词)以找到 [=24= 的索引].这还会告诉您索引类型,这将告诉您它是否是文本(域)索引。
然后查询 ALL_IND_COLUMNS 这些索引以查看为哪些列定义了索引。
看来您必须将索引创建为
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