Создайте NZPLSQL для поиска min (date) и max (date) для группы полей, которые служат ключом

Я хотел бы знать, как я могу выполнить выбор из хранимой процедуры Netezza.

В настоящее время у меня есть строящаяся процедура, и я читал, что уведомление об уведомлении служит для печати на экране, однако я не знаю, как (или если вы можете распечатать таблицу в sql) так же, как если бы вы делали запрос в традиционном sql.

Что пытается сделать запрос, так это то, что для записи,

COUNT (*) AS N_REPETITIONS, 
CDS.CASO_PACIENTE_FK, 
CDS.RESIVALITY_SPECIALITY_COD, 
CDS.CASO_NIVEL_ATENCION_TIPO, 
CDS.CASO_TIPO_PRESTACION_FK, 
CDS.DIVING_DATE_DAY, 
CDS.SALID_DATE_DAY

и что он дает мне MIN(CDS.DERIVACION_FECHA_HORA)и MAX(CDS.SALIDA_FECHA_HORA)на основе ключа, который является полями.

Если у меня есть даты между MIN(CDS.DERIVACION_FECHA_HORA)и MAX(CDS.SALIDA_FECHA_HORA)для a CDS.CASO_PACIENTE_FK, я хочу, чтобы этот регистр добавлен в число регистров для каждогоCDS.CASO_PACIENTE_FK

Здесь код:

CREATE OR REPLACE PROCEDURE SP_ANALISIS_DUPLICADOS()
RETURNS REFTABLE(NETEZZA_PROD_LISTA_ESPERA_NOGES.LLAVE_CASOS_DUPLICADOS)
EXECUTE AS OWNER
LANGUAGE NZPLSQL AS

BEGIN_PROC

  DECLARE

  num_args INTEGER;

Я только начинаю работать Netezza.

Заранее благодарю вас за ответ.


Это код:

    CREATE OR REPLACE PROCEDURE SP_ANALISIS_DUPLICADOS()
    RETURNS REFTABLE(NETEZZA_PROD_LISTA_ESPERA_NOGES.LLAVE_CASOS_DUPLICADOS)
    EXECUTE AS OWNER 
    LANGUAGE NZPLSQL AS

    BEGIN_PROC

  DECLARE

  num_args INTEGER;
  typ oid;
  idx INTEGER;
  N_REPETICIONES NUMERIC(19);
  CASO_PACIENTE_FK NUMERIC(19);
  DERIVACION_ESPECIALIDAD_COD VARCHAR(255);
  CASO_NIVEL_ATENCION_TIPO NUMERIC(19);
  CASO_TIPO_PRESTACION_FK NUMERIC(19);
  DERIVACION_FECHA_HORA TIMESTAMP;
  SALIDA_FECHA_HORA TIMESTAMP;

  --CURSOR FECHA_HORA_DERIVACION_MIN;
  --CURSOR FECHA_HORA_SALIDA_MAX;
  CURSOR CASO_PACIENTE_FK;
  CURSOR DERIVACION_ESPECIALIDAD_COD;
  CURSOR CASO_NIVEL_ATENCION_TIPO;
  CURSOR CASO_TIPO_PRESTACION_FK;
  --L_CONDITIONS VARCHAR(1000);

--Duplicados CNE MIN

BEGIN

num_args := PROC_ARGUMENT_TYPES.count;

FOR CASO_PACIENTE_FK IN
    num_args := CASO_PACIENTE_FK.count;
--RAISE NOTICE a€™Number of arguments: %a€™, num_args;
    for i IN 0
        CASO_PACIENTE_FK.count - 1 LOOP
        typ := CASO_PACIENTE_FK(i);
        idx := i+1;

FOR DERIVACION_ESPECIALIDAD_COD IN
    num_args := DERIVACION_ESPECIALIDAD_COD.count;
    for j IN 0
        DERIVACION_ESPECIALIDAD_COD.count - 1 LOOP
        typ := DERIVACION_ESPECIALIDAD_COD(j);
        idx := j+1;

FOR CASO_NIVEL_ATENCION_TIPO IN
    num_args := CASO_PACIENTE_FK.count;
--RAISE NOTICE a€™Number of arguments: %a€™, num_args;
    for k IN 0
        CASO_NIVEL_ATENCION_TIPO.count - 1 LOOP
        typ := CASO_NIVEL_ATENCION_TIPO(k);
        idx := k+1;

FOR CASO_TIPO_PRESTACION_FK IN
    num_args := CASO_TIPO_PRESTACION_FK.count;
--RAISE NOTICE a€™Number of arguments: %a€™, num_args;
    for a IN 0
        CASO_TIPO_PRESTACION_FK.count - 1 LOOP
        typ := CASO_TIPO_PRESTACION_FK(a);
        idx := a+1;

--RAISE NOTICE a€™argument $% is type % and has the value a€™a€™%a€™a€™a€™,
--idx, typ, $idx;
   F FLAG = 1 THEN
     IF Fecha_Entrada = SELECT COUNT(*) AS N_REPETICIONES, MIN(CDS.DERIVACION_FECHA_HORA) AS FECHA_HORA_DERIVACION_MIN
        FROM NETEZZA_PROD_SIGTE_DIARIO.SIG_CASO_DERIVACION_SALIDA CDS
        WHERE (CDS.CASO_TIPO_PRESTACION_FK=1
        OR CDS.CASO_TIPO_PRESTACION_FK=2)
        --AND CDS.DERIVACION_FECHA_HORA >= CDS.DERIVACION_FECHA_HORA
        GROUP BY CDS.CASO_PACIENTE_FK, CDS.DERIVACION_ESPECIALIDAD_COD, /*CDS.DERIVACION_ESTABLECIMIENTO_COD*/
        CDS.CASO_NIVEL_ATENCION_TIPO, /*CDS.DERIVACION_FECHA_HORA,*/ CDS.CASO_TIPO_PRESTACION_FK, CDS.DERIVACION_FECHA_HORA,
        CDS.SALIDA_FECHA_HORA
        HAVING COUNT(*)>1
        ORDER BY N_REPETICIONES, CDS.CASO_PACIENTE_FK, CDS.DERIVACION_FECHA_HORA, CDS.SALIDA_FECHA_HORA DESC
     THEN Fecha_Entrada = 'TRUE';
     ELSE FLAG = 0 THEN
     Fecha_Entrada = 'FALSE'

   F FLAG = 1 THEN
     IF Fecha_Salida = SELECT COUNT(*) AS N_REPETICIONES, MAX(CDS.SALIDA_FECHA_HORA) AS FECHA_HORA_DERIVACION_MIN
        FROM NETEZZA_PROD_SIGTE_DIARIO.SIG_CASO_DERIVACION_SALIDA CDS
        WHERE (CDS.CASO_TIPO_PRESTACION_FK=1
        OR CDS.CASO_TIPO_PRESTACION_FK=2)
        --AND CDS.DERIVACION_FECHA_HORA >= CDS.DERIVACION_FECHA_HORA
        GROUP BY CDS.CASO_PACIENTE_FK, CDS.DERIVACION_ESPECIALIDAD_COD, /*CDS.DERIVACION_ESTABLECIMIENTO_COD*/
        CDS.CASO_NIVEL_ATENCION_TIPO, /*CDS.DERIVACION_FECHA_HORA,*/ CDS.CASO_TIPO_PRESTACION_FK, CDS.DERIVACION_FECHA_HORA,
        CDS.SALIDA_FECHA_HORA
        HAVING COUNT(*)>1
        ORDER BY N_REPETICIONES, CDS.CASO_PACIENTE_FK, CDS.DERIVACION_FECHA_HORA, CDS.SALIDA_FECHA_HORA DESC
     THEN Fecha_Salida = 'TRUE';
     ELSE FLAG = 0 THEN
     Fecha_Salida = 'FALSE'

END LOOP;

END LOOP;

END LOOP;

END LOOP;

RETURN REFTABLE;

RAISE NOTICE 'Hello, %', MYNAME;  --Right Here must go the Println (Select field1, field2, etc.....)

--END;
--COMMIT;
END;
END_PROC;

sql,oracle,stored-procedures,netezza,

0

Ответов: 0


Это код:

    CREATE OR REPLACE PROCEDURE SP_ANALISIS_DUPLICADOS()
    RETURNS REFTABLE(NETEZZA_PROD_LISTA_ESPERA_NOGES.LLAVE_CASOS_DUPLICADOS)
    EXECUTE AS OWNER 
    LANGUAGE NZPLSQL AS

    BEGIN_PROC

  DECLARE

  num_args INTEGER;
  typ oid;
  idx INTEGER;
  N_REPETICIONES NUMERIC(19);
  CASO_PACIENTE_FK NUMERIC(19);
  DERIVACION_ESPECIALIDAD_COD VARCHAR(255);
  CASO_NIVEL_ATENCION_TIPO NUMERIC(19);
  CASO_TIPO_PRESTACION_FK NUMERIC(19);
  DERIVACION_FECHA_HORA TIMESTAMP;
  SALIDA_FECHA_HORA TIMESTAMP;

  --CURSOR FECHA_HORA_DERIVACION_MIN;
  --CURSOR FECHA_HORA_SALIDA_MAX;
  CURSOR CASO_PACIENTE_FK;
  CURSOR DERIVACION_ESPECIALIDAD_COD;
  CURSOR CASO_NIVEL_ATENCION_TIPO;
  CURSOR CASO_TIPO_PRESTACION_FK;
  --L_CONDITIONS VARCHAR(1000);

--Duplicados CNE MIN

BEGIN

num_args := PROC_ARGUMENT_TYPES.count;

FOR CASO_PACIENTE_FK IN
    num_args := CASO_PACIENTE_FK.count;
--RAISE NOTICE a€™Number of arguments: %a€™, num_args;
    for i IN 0
        CASO_PACIENTE_FK.count - 1 LOOP
        typ := CASO_PACIENTE_FK(i);
        idx := i+1;

FOR DERIVACION_ESPECIALIDAD_COD IN
    num_args := DERIVACION_ESPECIALIDAD_COD.count;
    for j IN 0
        DERIVACION_ESPECIALIDAD_COD.count - 1 LOOP
        typ := DERIVACION_ESPECIALIDAD_COD(j);
        idx := j+1;

FOR CASO_NIVEL_ATENCION_TIPO IN
    num_args := CASO_PACIENTE_FK.count;
--RAISE NOTICE a€™Number of arguments: %a€™, num_args;
    for k IN 0
        CASO_NIVEL_ATENCION_TIPO.count - 1 LOOP
        typ := CASO_NIVEL_ATENCION_TIPO(k);
        idx := k+1;

FOR CASO_TIPO_PRESTACION_FK IN
    num_args := CASO_TIPO_PRESTACION_FK.count;
--RAISE NOTICE a€™Number of arguments: %a€™, num_args;
    for a IN 0
        CASO_TIPO_PRESTACION_FK.count - 1 LOOP
        typ := CASO_TIPO_PRESTACION_FK(a);
        idx := a+1;

--RAISE NOTICE a€™argument $% is type % and has the value a€™a€™%a€™a€™a€™,
--idx, typ, $idx;
   F FLAG = 1 THEN
     IF Fecha_Entrada = SELECT COUNT(*) AS N_REPETICIONES, MIN(CDS.DERIVACION_FECHA_HORA) AS FECHA_HORA_DERIVACION_MIN
        FROM NETEZZA_PROD_SIGTE_DIARIO.SIG_CASO_DERIVACION_SALIDA CDS
        WHERE (CDS.CASO_TIPO_PRESTACION_FK=1
        OR CDS.CASO_TIPO_PRESTACION_FK=2)
        --AND CDS.DERIVACION_FECHA_HORA >= CDS.DERIVACION_FECHA_HORA
        GROUP BY CDS.CASO_PACIENTE_FK, CDS.DERIVACION_ESPECIALIDAD_COD, /*CDS.DERIVACION_ESTABLECIMIENTO_COD*/
        CDS.CASO_NIVEL_ATENCION_TIPO, /*CDS.DERIVACION_FECHA_HORA,*/ CDS.CASO_TIPO_PRESTACION_FK, CDS.DERIVACION_FECHA_HORA,
        CDS.SALIDA_FECHA_HORA
        HAVING COUNT(*)>1
        ORDER BY N_REPETICIONES, CDS.CASO_PACIENTE_FK, CDS.DERIVACION_FECHA_HORA, CDS.SALIDA_FECHA_HORA DESC
     THEN Fecha_Entrada = 'TRUE';
     ELSE FLAG = 0 THEN
     Fecha_Entrada = 'FALSE'

   F FLAG = 1 THEN
     IF Fecha_Salida = SELECT COUNT(*) AS N_REPETICIONES, MAX(CDS.SALIDA_FECHA_HORA) AS FECHA_HORA_DERIVACION_MIN
        FROM NETEZZA_PROD_SIGTE_DIARIO.SIG_CASO_DERIVACION_SALIDA CDS
        WHERE (CDS.CASO_TIPO_PRESTACION_FK=1
        OR CDS.CASO_TIPO_PRESTACION_FK=2)
        --AND CDS.DERIVACION_FECHA_HORA >= CDS.DERIVACION_FECHA_HORA
        GROUP BY CDS.CASO_PACIENTE_FK, CDS.DERIVACION_ESPECIALIDAD_COD, /*CDS.DERIVACION_ESTABLECIMIENTO_COD*/
        CDS.CASO_NIVEL_ATENCION_TIPO, /*CDS.DERIVACION_FECHA_HORA,*/ CDS.CASO_TIPO_PRESTACION_FK, CDS.DERIVACION_FECHA_HORA,
        CDS.SALIDA_FECHA_HORA
        HAVING COUNT(*)>1
        ORDER BY N_REPETICIONES, CDS.CASO_PACIENTE_FK, CDS.DERIVACION_FECHA_HORA, CDS.SALIDA_FECHA_HORA DESC
     THEN Fecha_Salida = 'TRUE';
     ELSE FLAG = 0 THEN
     Fecha_Salida = 'FALSE'

END LOOP;

END LOOP;

END LOOP;

END LOOP;

RETURN REFTABLE;

RAISE NOTICE 'Hello, %', MYNAME;  --Right Here must go the Println (Select field1, field2, etc.....)

--END;
--COMMIT;
END;
END_PROC;
00SQL, Oracle, хранимая-процедура, Netezza,
Похожие вопросы