Página 1 de 2 1 2 ÚltimoÚltimo
Resultados 1 al 10 de 11

Tema: SQL embebido - cursor con COUNT() en PowerCOBOL 7

  1. #1
      Junior
    d

    Registrado
    febrero de 2017
    Ubicación
    Caba Argentina
    Mensajes
    66
    Última visita
    14.10.2022

    Agradecimientos
     
    Recibidos
    9
    Enviados
    3

    Citaciones y menciones
     
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    6

    Tabla SQL embebido - cursor con COUNT() en PowerCOBOL 7

    Hola tengo esta sentencia sql probada en phpadmin ahora lo quiero pasar a un programa en power con sql embebido pero no me funciona alguna ayuda, gracias

    Codigo en php admin
    PHP Código:
    1. SELECT caja, COUNT( 1 )
    2. FROM  `ventanilla`
    3. where DATE( fecha ) = '2018-05-03'
    4. GROUP BY caja

    en power
    COBOL Código:
    1.      EXEC SQL CONNECT TO 'BASE'     END-EXEC.
    2.  
    3.      EXEC SQL DECLARE Registro CURSOR  FOR  SELECT caja, COUNT( 1 ) FROM  'ventanilla'  where DATE( fecha ) = '2018-05-03'  GROUP BY caja END-EXEC
    4.  
    5.   EXEC SQL        OPEN   Registro END-EXEC.
    6.      PERFORM cargo UNTIL SQLSTATE = "02000".
    7.      EXEC SQL        CLOSE  Registro END-EXEC
    8.      EXEC SQL       DISCONNECT 'BASE'              
    9.   END-EXEC. EXIT PROGRAM.

    cargo.
    .....

    0 Not allowed!

  2. #2
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,087
    Última visita
    Hoy a las 12:05

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

    Citaciones y menciones
     
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    12 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @drvedia1981, danos más datos. ¿Qué error te da exactamente?

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  3. #3
      Junior
    d

    Registrado
    febrero de 2017
    Ubicación
    Caba Argentina
    Mensajes
    66
    Última visita
    14.10.2022

    Agradecimientos
     
    Recibidos
    9
    Enviados
    3

    Citaciones y menciones
     
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    6

    Predeterminado

    Hola KUK, el cursor no me devuelve nada o algo pongo mal, el resultado de la sentencia da 0 el sqlstate creo que eso esta bien, estoy trabajando con esta base pero no recuperando datos de esta forma que puede ser gracias es algo urgente!!!.
    Esto me devuelve el phpadmin
    CODE Código:
    1. 01  47
    2. 02  18
    3. 03  34
    4. 04  55
    5. 06  59
    6. 07  31
    7. 08  18

    0 Not allowed!

  4. #4
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    691
    Última visita
    Hoy a las 11:16

    Agradecimientos
     
    Recibidos
    385
    Enviados
    314

    Citaciones y menciones
     
    Mentioned
    32 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    6 Post(s)
    Poder de Reputación
    35
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado

    @drvedia1981, No puedes usar sql embebido con un declare cursor y un select count, o por lo menos yo no lo he conseguido, ejecútalo sin el count y verás como funciona perfectamente.

    Un saludo.-

    0 Not allowed!

  5. #5
      Junior
    d

    Registrado
    febrero de 2017
    Ubicación
    Caba Argentina
    Mensajes
    66
    Última visita
    14.10.2022

    Agradecimientos
     
    Recibidos
    9
    Enviados
    3

    Citaciones y menciones
     
    Mentioned
    6 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    0 Post(s)
    Poder de Reputación
    6

    Predeterminado

    Hola si todo parece ser el COUNT( 1 ) como puedo hacerlo de otra forma que no sea sql embebido necesito esos resultados para mostrar gracias

    0 Not allowed!

  6. #6
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,087
    Última visita
    Hoy a las 12:05

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

    Citaciones y menciones
     
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    12 Post(s)
    Poder de Reputación
    10

    Predeterminado

    Me parece muy raro que no se pueda hacer cursores con COUNT(). Habéis probado con COUNT(*) ?

    @drvedia1981, puedes hacer algo así:

    COBOL Código:
    1.      EXEC SQL
    2.          CONNECT TO 'BASE'    
    3.      END-EXEC.
    4.      
    5.      EXEC SQL
    6.          DECLARE Registro CURSOR  FOR  
    7.           SELECT DISTINCT caja
    8.             FROM 'ventanilla'  
    9.            where DATE( fecha ) = '2018-05-03'          
    10.      END-EXEC.
    11.      
    12.      EXEC SQL
    13.         OPEN Registro
    14.      END-EXEC.
    15.      
    16.      PERFORM cargo
    17.      
    18.      PERFORM UNTIL SQLSTATE = "02000"
    19.          SELECT COUNT(*)
    20.            INTO :WS-COUNT
    21.            FROM caja
    22.           WHERE ID_caja = :WS-ID-CAJA
    23.          
    24.          PERFORM cargo
    25.      END-PERFORM
    26.        
    27.      EXEC SQL
    28.          CLOSE Registro
    29.      END-EXEC
    30.      
    31.      EXEC SQL
    32.          DISCONNECT 'BASE'              
    33.      END-EXEC.

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  7. #7
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    691
    Última visita
    Hoy a las 11:16

    Agradecimientos
     
    Recibidos
    385
    Enviados
    314

    Citaciones y menciones
     
    Mentioned
    32 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    6 Post(s)
    Poder de Reputación
    35
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado

    @drvedia1981,

    A ver una cosa, no me había dado cuenta pero ... es ilógico usar un COUNT con un DECLARE CURSOR, los cursores, se utilizan para un FETCH, (un READ NEXT en COBOL), y un SELECT COUNT, no se puede utilizar con un FETCH, por lo menos hasta donde yo sé, donde yo lo he probado y no funciona, es en un PREPARE.

    ¿Qué es lo que quieres hacer exactamente?, a ver si es que lo estás haciendo mal y podemos ayudarte.


    @Kuk,

    No he probado a hacer un SELECT COUNT(*), porque no es lógico, sobre todo por hacer el COUNT más rápido y no sobrecargar la BD haciéndole contar todas las columnas, imagínate una tabla con 50.000 registros y 40 columnas, por ejemplo, pero lo pruebo y digo algo.


    Un saludo.-

    0 Not allowed!

  8. #8
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,087
    Última visita
    Hoy a las 12:05

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

    Citaciones y menciones
     
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    12 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @Josber, lo decía por si había un bug en el parser de sintaxis.

    Y en cuanto a lo de usar COUNT() en un cursor, no es frecuente pero puede haber necesidad. Y DB2, que es lo que más he usado, lo permite: IBM MAINFRAME: Db2 query to fetch duplicate rows

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

  9. #9
      Super Moderador
    Avatar de Josber

    Registrado
    febrero de 2015
    Ubicación
    Alicante
    Mensajes
    691
    Última visita
    Hoy a las 11:16

    Agradecimientos
     
    Recibidos
    385
    Enviados
    314

    Citaciones y menciones
     
    Mentioned
    32 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    6 Post(s)
    Poder de Reputación
    35
    Activista del Foro / Point Value: 0 Agradecimientos / Point Value: 0

    Predeterminado

    @drvedia1981,

    He estado haciendo pruebas y se puede usar un COUNT() en un PREPARE, vamos a suponer que tienes una tabla que se llama ABREVIAS y tiene como campos:
    ABRCOD varchar(3) UNIQUE
    ABRNOM varchar(60)

    la programación en PWC sería de ésta manera:

    COBOL Código:
    1.  WORKING-STORAGE SECTION.
    2.             EXEC SQL
    3.                  BEGIN DECLARE SECTION
    4.             END-EXEC.
    5.  01  WTEX               PIC X(100).
    6.  01  CONTASQL           PIC S9(5).
    7.             EXEC SQL
    8.                  END DECLARE SECTION
    9.             END-EXEC.
    10. .
    11. .
    12. .
    13. .
    14.  
    15.  PROCEDURE       DIVISION.
    16.  INICIO.
    17. *
    18.      MOVE "SELECT COUNT(ABRCOD) FROM ABREVIAS WHERE ABRCOD LIKE '%A%'" TO WTEX.
    19.  
    20.      EXEC SQL
    21.           PREPARE CONSULTA FROM :WTEX
    22.      END-EXEC.
    23.      
    24.      EXEC SQL
    25.           execute CONSULTA INTO :CONTASQL
    26.      END-EXEC.

    Lo que ya no reconoce el SqlEmbebido es la instrucción DEALLOCATE PREPARE ..., pero bueno, el resto funciona perfectamente, tanto poniendo un * como el nombre de la variable en el COUNT.

    Cita Iniciado por Kuk Ver Mensaje
    Y en cuanto a lo de usar COUNT() en un cursor
    No le veo la utilidad, si lo que quieres es contar los registros que cumplan unos parámetros, y SQL, te los cuenta sin tener que hacer un recorrido por la tabla con un FETCH, el que se pueda usar, vale, pero el que sea útil ...

    Un saludo.-

    0 Not allowed!

  10. #10
      Administrador
    Avatar de Kuk

    Registrado
    enero de 2015
    Ubicación
    Madrid
    Edad
    37
    Mensajes
    2,087
    Última visita
    Hoy a las 12:05

    Agradecimientos
     
    Recibidos
    908
    Enviados
    784

    Citaciones y menciones
     
    Mentioned
    39 Post(s)
    Tagged
    0 Thread(s)
    Quoted
    12 Post(s)
    Poder de Reputación
    10

    Predeterminado

    @Josber, según entiendo, lo que tiene es una tabla con campos:

    • CAJA - que viene a ser el ID
    • FECHA


    Donde CAJA no es único y puede haber varios registros.

    Para los resultados de phpMyAdmin:

    CODE Código:
    1. 01 47
    2. 02 18
    3. 03 34
    4. 04 55
    5. 06 59
    6. 07 31
    7. 08 18

    Lo que deduzco es que tal ID ha hecho una acción (por ejemplo venta) tantas veces al día.

    ¿Cómo lo harías tú?

    Lo mismo no es la mejor manera como lo está haciendo, pero yo en este caso le veo sentido al COUNT(). Porque el cursor no es otra cosa que crear una tabla temporal basada en tu SELECT que vas recorreidno.

    0 Not allowed!
    ¿Te han ayudado? NO TE OLVIDES de darle al botón
    ¿Quieres dirigirte a alguien en tu post? Notifícale con una mención, tienes 2 opciones:
    1. Haciendo clic en el icono al lado de su nick
    2. Haciendo clic en el botón en el editor y escribiendo su nick.

Página 1 de 2 1 2 ÚltimoÚltimo

Información de Tema

Usuarios Viendo este Tema

Actualmente hay 1 usuarios viendo este tema. (0 miembros y 1 visitantes)

Temas Similares

  1. [Aporte] Hyperfile SQL desde PowerCOBOL
    Por Dasije en el foro Cocina PowerCOBOL
    Respuestas: 3
    Último Mensaje: 14.07.2018, 17:46
  2. [Sintaxis] Sql Embebido
    Por Hrmcobol en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 23
    Último Mensaje: 28.06.2017, 02:09
  3. [Aporte] Ejemplo PWC y SQL Embebido
    Por Josber en el foro Cocina PowerCOBOL
    Respuestas: 10
    Último Mensaje: 15.06.2017, 04:17
  4. [Sintaxis] Variables en programa con SQL embebido
    Por DYANY en el foro IBM Enterprise COBOL
    Respuestas: 1
    Último Mensaje: 20.12.2016, 17:26
  5. [Sintaxis] Ocultar Cursor
    Por Recato53 en el foro PowerCOBOL (ActiveX, v4 - v11)
    Respuestas: 3
    Último Mensaje: 21.02.2015, 18:08

Etiquetas para este Tema

Marcadores

Marcadores

Permisos de Publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •