Лучший способ для извлечения текста (классификации) по запросу SQL в Java - PullRequest
0 голосов
/ 11 января 2019

У меня есть несколько SQL-запросов, подобных этому (около 10.000):

SELECT (COLUMN BODY) 
FROM (TABLES BODY) 
WHERE... 

Часть where необязательна.

Мне нужно извлечь из запроса «COLUMN BODY» и «TABLES BODY», но они динамические (я нашел много функций и подзапросов SQL)

Подумайте, как получить вектор с разделенным запросом или что-то в этом роде:

String result = [SELECT, "COLUMN BODY", FROM, "TABLES BODY", WHERE, ... ]

Цель, я работаю в «переводчике SQL» и мне нужно извлечь эти части из этих динамических запросов. Я пробовал расщепление строк и другие, но результат очень расстраивает, поэтому я ищу альтернативу для достижения этой цели. Я работаю над проектом Java.

Каков наилучший способ получить это?

Редактировать

Вот примеры запросов:

SELECT COMPANIA, ANO, TIPO_COBRO, CODIGO, DESCRIPCION FROM SF_DESCRIPCIONES_ESTAND

SELECT AUT_FAMILIARES.COMPANIA, AUT_FAMILIARES.DCTO_EMPLEADO, AUT_FAMILIARES.SUCURSAL_EMPLEADO, AUT_FAMILIARES.IDENTIFICACION,  AUT_FAMILIARES.SUCURSAL, AUT_FAMILIARES.CONSECUTIVO,   AUT_FAMILIARES.DCTO_IDENTIDAD,   AUT_FAMILIARES.PARENTESCO,   AUT_FAMILIARES.NOMBRE,   AUT_FAMILIARES.FECHANCTO,   AUT_FAMILIARES.SEXO,   AUT_FAMILIARES.OBSERVACIONES,   AUT_FAMILIARES.POLIZA,   AUT_FAMILIARES.SALUD,   AUT_FAMILIARES.PORCENTAJE,   AUT_FAMILIARES.OCUPACION,   AUT_FAMILIARES.TELEFONO,   AUT_FAMILIARES.POS,   AUT_FAMILIARES.AUXILIO_EDUCATIVO,   AUT_FAMILIARES.APELLIDO1,   AUT_FAMILIARES.APELLIDO2,   AUT_FAMILIARES.DIRECCION,   AUT_FAMILIARES.ESTADO_ACTUAL,   AUT_FAMILIARES.DCTO_IDENTIDAD_A,   AUT_FAMILIARES.PARENTESCO_A,   AUT_FAMILIARES.NOMBRE_A,   AUT_FAMILIARES.SEXO_A,   AUT_FAMILIARES.OBSERVACIONES_A,   AUT_FAMILIARES.POLIZA_A,   AUT_FAMILIARES.SALUD_A,   AUT_FAMILIARES.PORCENTAJE_A,   AUT_FAMILIARES.OCUPACION_A,   AUT_FAMILIARES.TELEFONO_A,   AUT_FAMILIARES.POS_A,   AUT_FAMILIARES.AUXILIO_EDUCATIVO_A,   AUT_FAMILIARES.APELLIDO1_A,   AUT_FAMILIARES.APELLIDO2_A,   AUT_FAMILIARES.DIRECCION_A,   AUT_FAMILIARES.ESTADO_ACTUAL_A,   AUT_FAMILIARES.ESTADO,   AUT_FAMILIARES.DESTINATARIO,   AUT_FAMILIARES.SUCURSAL_DESTINATARIO,   AUT_FAMILIARES.TIPO_SOLICITUD,   AUT_FAMILIARES.FECHA_APROBACION,   AUT_FAMILIARES.ENVIADO,   AUT_FAMILIARES.ACTUALIZADO,   AUT_FAMILIARES.RUTA,   AUT_FAMILIARES.CREATED_BY,   AUT_FAMILIARES.DATE_CREATED,   AUT_FAMILIARES.MODIFIED_BY,   AUT_FAMILIARES.DATE_MODIFIED,   AUT_FAMILIARES.N_IDENTIFICACION,   AUT_FAMILIARES.EDAD,   AUT_FAMILIARES.EDAD_A FROM AUT_FAMILIARES

SELECT DISTINCT CARGOS.ID_DE_CARGO, CARGOS.NOMBRE_DEL_CARGO FROM EV_EVALUADOR_EVALUADO EVAL INNER JOIN CARGOS ON EVAL.COMPANIA = CARGOS.COMPANIA AND EVAL.CARGO_EVALUADO = CARGOS.ID_DE_CARGO WHERE EVAL.COMPANIA = :COMPANIA   AND EVAL.CLASE_EVALUACION = :CLASEEVALUACION   AND CARGOS.ID_DE_CARGO >= :CODIGO ORDER BY CARGOS.ID_DE_CARGO

SELECT ROWNUM CODIGO, DECODE (ROWNUM, 1,'Activo',2,'Pensionado',3,'Retirado',4,'Suspensión Preventiva',5,'Activarlo para Ajustes Liquidación',6,'Comisión',7,'Encargos')NOMBRE FROM DUAL CONNECT BY ROWNUM < 8

SELECT * FROM ( SELECT A.*, ROWNUM RNUM FROM(SELECT * FROM (SELECT  INVENTARIO.CODIGOELEMENTO, INVENTARIO.NOMBRELARGO  FROM INVENTARIO WHERE INVENTARIO.COMPANIA = :COMPANIA AND INVENTARIO.TIPO NOT IN ('C') ORDER BY INVENTARIO.COMPANIA, INVENTARIO.CODIGOELEMENTO) WHERE (CASE WHEN CODIGOELEMENTO IS NULL THEN ' ' ELSE UPPER(CODIGOELEMENTO) END)  LIKE UPPER(:CODIGOELEMENTO || '%')  AND (CASE WHEN NOMBRELARGO IS NULL THEN ' ' ELSE UPPER(NOMBRELARGO) END)  LIKE UPPER( '%' || :NOMBRELARGO || '%') ) A WHERE ROWNUM <=  (:PAGINICIO + :PAGTAMANIO)) WHERE RNUM > :PAGINICIO
...