Gracias Rui Pinto (Rapinto)
COBOL Foro
Foro dedicado a COBOL, a la Programación y a la Informática.
  COBOL Foro > IDE-s y compiladores COBOL > Fujitsu COBOL > PowerCOBOL (ActiveX, v4 - v11)
PowerCOBOL (ActiveX, v4 - v11) Versiones del IDE basadas en ActiveX
Comunicados
Otros temas que te pueden interesar
Tema Autor Foro Respuestas Último post
[Aporte] Hyperfile SQL desde PowerCOBOL Dasije Cocina PowerCOBOL 3 14 de julio de 2018 16:46
[Sintaxis] Sql Embebido Hrmcobol PowerCOBOL (ActiveX, v4 - v11) 23 28 de junio de 2017 01:09
[Aporte] Ejemplo PWC y SQL Embebido Josber Cocina PowerCOBOL 10 15 de junio de 2017 03:17
[Sintaxis] Variables en programa con SQL embebido DYANY IBM Enterprise COBOL 1 20 de diciembre de 2016 16:26
[Sintaxis] Ocultar Cursor Recato53 PowerCOBOL (ActiveX, v4 - v11) 3 21 de febrero de 2015 17:08
Respuesta
 
Herramientas

  #1
Antiguo 11 de junio de 2018, 20:21
IDENTIFICATION DIVISION
drvedia1981
 Junior
ENVIRONMENT DIVISION
Avatar de drvedia1981
DATA DIVISION
febrero 2017
Caba Argentina
23.08.2021 20:04
PROCEDURE DIVISION
Posts: 50
Enviado: 1
Recibido: 8
Soluciones: 1
Reputación: 5
drvedia1981 is an unknown quantity at this point
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
Código PHP:
  1. SELECT caja, COUNT( 1 )
  2. FROM  `ventanilla`
  3. where DATE( fecha ) = '2018-05-03'
  4. GROUP BY caja

en power
Código COBOL:
  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.
.....
drvedia1981 no ha iniciado sesión   Responder Con Cita
  #2
Antiguo 11 de junio de 2018, 20:27
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
enero 2015
Madrid
36 años
26.11.2021 19:14
PROCEDURE DIVISION
Posts: 1.892
Enviado: 613
Recibido: 800
Soluciones: 99
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

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



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
  #3
Antiguo 11 de junio de 2018, 20:49
IDENTIFICATION DIVISION
drvedia1981
 Junior
ENVIRONMENT DIVISION
Avatar de drvedia1981
DATA DIVISION
febrero 2017
Caba Argentina
23.08.2021 20:04
PROCEDURE DIVISION
Posts: 50
Enviado: 1
Recibido: 8
Soluciones: 1
Reputación: 5
drvedia1981 is an unknown quantity at this point
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
Código:
01  47
02  18
03  34
04  55
06  59
07  31
08  18
drvedia1981 no ha iniciado sesión   Responder Con Cita
  #4
Antiguo 11 de junio de 2018, 22:04
IDENTIFICATION DIVISION
Josber
 Super Moderador
Activista del Foro: Activista del Foro - Razón: Por aportar manuales y enriquecer   Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Razón: Por muchos agradecimientos 
ENVIRONMENT DIVISION
Avatar de Josber
DATA DIVISION
febrero 2015
Alicante
26.11.2021 20:15
PROCEDURE DIVISION
Posts: 605
Enviado: 278
Recibido: 303
Soluciones: 41
Reputación: 31
Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road
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.-
Josber no ha iniciado sesión   Responder Con Cita
  #5
Antiguo 11 de junio de 2018, 22:08
IDENTIFICATION DIVISION
drvedia1981
 Junior
ENVIRONMENT DIVISION
Avatar de drvedia1981
DATA DIVISION
febrero 2017
Caba Argentina
23.08.2021 20:04
PROCEDURE DIVISION
Posts: 50
Enviado: 1
Recibido: 8
Soluciones: 1
Reputación: 5
drvedia1981 is an unknown quantity at this point
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
drvedia1981 no ha iniciado sesión   Responder Con Cita
  #6
Antiguo 12 de junio de 2018, 09:16
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
enero 2015
Madrid
36 años
26.11.2021 19:14
PROCEDURE DIVISION
Posts: 1.892
Enviado: 613
Recibido: 800
Soluciones: 99
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
Predeterminado

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

drvedia1981, puedes hacer algo así:

Código COBOL:
  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.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
  #7
Antiguo 12 de junio de 2018, 11:41
IDENTIFICATION DIVISION
Josber
 Super Moderador
Activista del Foro: Activista del Foro - Razón: Por aportar manuales y enriquecer   Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Razón: Por muchos agradecimientos 
ENVIRONMENT DIVISION
Avatar de Josber
DATA DIVISION
febrero 2015
Alicante
26.11.2021 20:15
PROCEDURE DIVISION
Posts: 605
Enviado: 278
Recibido: 303
Soluciones: 41
Reputación: 31
Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road
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.-
Josber no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
Kuk (12 de junio de 2018)
  #8
Antiguo 12 de junio de 2018, 12:10
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
enero 2015
Madrid
36 años
26.11.2021 19:14
PROCEDURE DIVISION
Posts: 1.892
Enviado: 613
Recibido: 800
Soluciones: 99
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
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



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
  #9
Antiguo 12 de junio de 2018, 13:37
IDENTIFICATION DIVISION
Josber
 Super Moderador
Activista del Foro: Activista del Foro - Razón: Por aportar manuales y enriquecer   Agradecimientos: Por muchos agradecimientos de parte de los Foreros - Razón: Por muchos agradecimientos 
ENVIRONMENT DIVISION
Avatar de Josber
DATA DIVISION
febrero 2015
Alicante
26.11.2021 20:15
PROCEDURE DIVISION
Posts: 605
Enviado: 278
Recibido: 303
Soluciones: 41
Reputación: 31
Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road Josber is on a distinguished road
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:

Código COBOL:
  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 del post de 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.-
Josber no ha iniciado sesión   Responder Con Cita
Ha dicho Gracias : 1
David (15 de mayo de 2021)
  #10
Antiguo 12 de junio de 2018, 13:55
IDENTIFICATION DIVISION
Kuk
 Administrador
ENVIRONMENT DIVISION
Avatar de Kuk
DATA DIVISION
enero 2015
Madrid
36 años
26.11.2021 19:14
PROCEDURE DIVISION
Posts: 1.892
Enviado: 613
Recibido: 800
Soluciones: 99
Reputación: 10
Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road Kuk is on a distinguished road
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:

Código:
01 47
02 18
03 34
04 55
06 59
07 31
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.



NORMAS DEL FORO - para garantizar el buen funcionamiento del Foro.
¿Te han ayudado? NO TE OLVIDES de darle a
¿Quieres dirigirte a alguien en tu post? Notifícale haciendo clic en su Nick
Kuk no ha iniciado sesión   Responder Con Cita
Respuesta

Tags
count() , embebido , embedded , sql


Usuarios activos actualmente viendo este tema: 1 (0 miembros y 1 visitantes)
 
Herramientas

Derechos de Publicación
No puedes publicar nuevos temas
No puedes publicar posts/responder
No puedes adjuntar archivos
No puedes editar tus posts

BB code is habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado



La franja horaria es GMT +1. Ahora son las 09:54.
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2021, Jelsoft Enterprises Ltd.