创建一个NZPLSQL以查找用作键的一组字段的最小值(日期)和最大值(日期)

创建一个NZPLSQL以查找用作键的一组字段的最小值(日期)和最大值(日期),sql,oracle,stored-procedures,netezza,Sql,Oracle,Stored Procedures,Netezza,我想知道如何从存储在Netezza中的过程中执行select 我目前正在构建这个过程,我读到raise通知用于在屏幕上打印,但是我不知道如何(或者是否可以用sql打印一个表),就像用传统sql进行查询一样 查询试图做的是,对于记录 COUNT (*) AS N_REPETITIONS, CDS.CASO_PACIENTE_FK, CDS.RESIVALITY_SPECIALITY_COD, CDS.CASO_NIVEL_ATENCION_TIPO, CDS.CASO_TIPO_PREST

我想知道如何从存储在
Netezza
中的过程中执行select

我目前正在构建这个过程,我读到raise通知用于在屏幕上打印,但是我不知道如何(或者是否可以用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.derivision\u FECHA\u HORA)
MAX(CDS.SALIDA\u FECHA\u HORA)
,基于字段的键

如果对于
CDS.CASO\u PACIENTE\u FK
,我的日期介于
MIN(CDS.derivision\u FECHA\u HORA)
MAX(CDS.SALIDA\u FECHA\u HORA)
之间,我希望将该寄存器添加到每个
CDS.CASO\u PACIENTE\u 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;
    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 ’Number of arguments: %’, 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 ’Number of arguments: %’, 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 ’Number of arguments: %’, num_args;
    for a IN 0
        CASO_TIPO_PRESTACION_FK.count - 1 LOOP
        typ := CASO_TIPO_PRESTACION_FK(a);
        idx := a+1;

--RAISE NOTICE ’argument $% is type % and has the value ’’%’’’,
--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;
我刚刚开始使用
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;
    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 ’Number of arguments: %’, 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 ’Number of arguments: %’, 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 ’Number of arguments: %’, num_args;
    for a IN 0
        CASO_TIPO_PRESTACION_FK.count - 1 LOOP
        typ := CASO_TIPO_PRESTACION_FK(a);
        idx := a+1;

--RAISE NOTICE ’argument $% is type % and has the value ’’%’’’,
--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;

这看起来不像是Oracle的问题。@WilliamRobertson-Netezza有一种与Oracle PL/SQL非常相似的过程语言。@gonzalo-如果您发布了一段更简单的代码,着重于您试图解决的问题,您可能会得到更有用的答案。要详细介绍@APC所说的内容,请参阅和。