Realmente con mi pregunta original no preguntaba por las diferencias entre DDS
y DDL ni iniciar un conversión sobre ese tema (tampoco me importa que ocurra).
Creo que tengo bastante claro las diferencias y las ventajas/inconvenientes de
cada modelo, mi duda era más "existencial". Sólo quería saber si, a parte de
las diferencias que la mayoría conocemos:
- CRTLF vs CREATE INDEX
- Lógico sin claves vs vista SQL
- Lógico con claves vs índice SQL
- Tamaño de página
- etc
los índices disponían de una "característica" que decantara la balanza.
Con los conocimientos (que son pocos) sobre el tema, mi experiencia es:
- Tengo la sensación que el motor SQL SQE sí que tiene en cuenta los lógicos
para analizar y generar los planes de acceso. Supongo que el motor busca vías
de acceso, independientemente si son lógicos o índices.
- Por lo que he leído, un índice es un lógico con clave con un tamaño de página
mayor. De hecho, en el manual dice que se utiliza CRTLF para crear el índice.
- A efectos de uso en un RPG con operaciones de E/S nativas no hay diferencias
en utilizar uno u otro.
- Al crear un índice o lógico el sistema aprovecha vías de acceso ya existentes
para crear el nuevo índice/lógico.
- Las herramientas de IBM (sobre todo el navegador de operaciones o "navigator
for i") diferencian claramente el objeto que es un índice de lo que es un
lógico.
Respecto a tu respuesta, creo que en V6R1 (no sé si V5R4) sí se pueden crear
índices con selección de registros ya que disponde de una cláusula WHERE en el
CREATE INDEX.
Estoy de acuerdo contigo que la documentación que añadíamos a las DDS parece
menos vistosa en un miembro fuente con CREATE TABLE. Habría que plantearse si
es oportuno crear una documentación a parte (word, excel, la herramienta que
sea) con la información de cada campo y tabla.
Respecto a la técnica descrita para crear archivos temporales o intermedios, yo
utilizo otra. Normalmente estos archivos existen vacíos en una biblioteca (de
programas o de plantillas). Cuando un programo necesita uno de ellos, lo
duplica en la QTEMP (CRTDUPOBJ) o en la biblioteca que se quiera y luego los
usa (OVRDBF). Mi experiencia es, que al sistema le cuesta más crear un archivo
desde cero (CRTLF o CREATE TABLE) que duplicarlo.
Gracias por tu aportación.
Javier
________________________________
De: [email protected]
[mailto:[email protected]] En nombre de Angel ALMEIDA
(DHL ES)
Enviado el: miércoles, 22 de octubre de 2014 11:22
Para: forum.help400
Asunto: RE: Diferencias entre archivo lógico e índices SQL
Hola,
Sin entrar en las grandes diferencias que existen entre DDS y DDL,
evidentemente son muchas (tampoco hay que olvidar que las DD's ya han dejado de
recibir mejoras), si quería apuntar algunas "pequeñas diferencias" que afectan
al RPG.
El fichero lógico además de claves, permite seleccionar registros, un
caso típico sería un fichero que tenga registros suprimidos (No físicamente),
si no un campo con una marca, el lógico estaría construido con un clave de
acceso y una selección de que solo mostrase los que tuviesen un determinado
campo en blanco ó que fuese diferente a "B" de baja, los RPG que accediesen a
este fichero no tendría que preocuparse de filtrar los registros de baja, si
ahora trasladamos esto a DDL, tendríamos que hacer CREATE TABLE.., CREATE
INDEX y CREATE VIEW, el índice no permite filtrar y la vista no permite
especificar claves, así que nuestro RPG tendría que sufrir modificaciones.
No estoy defendiendo las DDS, sé que están muertas y las posibilidades
de la DDL son muchas y además seguirán recibiendo mejoras, pero es cierto que
las aplicaciones que han convivido con DDS no son tan fáciles de migrar, otra
de las cosas que no me gusta demasiado de las DDL es la forma de crearlas,
ahora disponemos de una DDS en fichero con todos los detalles y comentarios que
quiera poner, puedo utilizar esta DDS desde un CLLE ó desde 200, siempre
utilizo la misma descripción, solo hago el CRTPF con el nombre y ya está, a la
hora de trabajar con ficheros temporales, los que normalmente creamos en QTEMP
es muy sencillo, al comienzo del CCLE hacemos el CRTPF y cuando llamamos al RPG
el fichero ya existe, si lo hacemos con DDL, yo normalmente los CREATE los hago
dentro del RPG pero si reutilizo ese fichero para el ciclo del RPG, cuando se
ha abierto el programa el fichero todavía no existe y evidentemente el RPG da
error, otro inconveniente es que si lo utilizo en 10 RPG distintos tengo que
tener el CREATE TABLE con todos sus definiciones de campos en los 10 programas,
si quiero cambiar un campo tendría que hacerlos 10 veces, así que hay que
buscar soluciones alternativas que evidentemente alteran la forma de trabajar a
la que estamos acostumbrados con las DDS.
Es cierto que se pueden buscar soluciones más elegantes, por no son tan
sutiles, por lo menos desde mi punto de vista.
Saludos,
Angel Almeida.
From: [email protected]
[mailto:[email protected]] On Behalf Of Javier Mora
Sent: martes, 21 de octubre de 2014 19:53
To: forum.help400
Subject: RE: Diferencias entre archivo lógico e índices SQL
Creo que tengo bastante claro problemas e inconvenientes de utilizar
uno u otro tipo de objeto. Lo que realmente me llama la atención es que en
realidad son lo mismo a efectos de programación RPG, cuando yo creía que no era
así.
Es más comparando los tamaños de un lógico con clave con respecto a un
índice son, más o menos, iguales con pequeñas diferencias en función del tamaño
de página que elija para el índice.
Lo curioso es que IBM diferencia claramente un lógico de un índice y,
por eso, preguntaba si alguien pudiera tener una respuesta que aclarara esta
"duda existencial".
Gracias.
________________________________
De: [email protected]
[mailto:[email protected]] En nombre de Nicolas Silva
Enviado el: martes, 21 de octubre de 2014 18:24
Para: forum.help400
Asunto: Re: Diferencias entre archivo lógico e índices SQL
Hola todos, si es muy parecido pero no es exactamente lo mismo.
El archivo logico lo atiende el motor CQE (Classic Query
Engine) mientrar que el indice SQL lo atiende el motor SQL (SQL Query Engine).
En RPG puedes utilizar un indice SQL en la hoja F al igual que
cualquier logico creado con DDS.
Espero sirva el aporte.
Saludos.
Nicolas.
El 21 de octubre de 2014, 9:10, Javier Mora <[email protected]>
escribió:
Hola a tod@s:
me ha surgido una gran duda a raiz de una optimización de una
sentencia SQL. Hasta la fecha creía que un índice de SQL (CREATE INDEX) era un
objeto diferente a un archivo lógico (CRTLF). Pensaba que un índice no podía
utilizarse en la hoja F de un programa RPG para utilizarse con las sentencias
de E/S (CHAIN, READ, etc). Sin embargo, ¡sí se puede!, como si fuera un lógico
más.
Yo pensaba que al crear un índice el sistema sólo guardaba en
el objeto la vía de acceso, pero no tenía información sobre el resto de los
campos del registro. Este hecho era el que "impedía" su uso como archivo lógico
en un RPG. Sin embargo, hemos comprobado (por casualidad) que incluso podemos
utilizar el índice en un DFU para actualizar el registro.
A parte del tamaño de la página de datos (64kb) ¿qué
diferencias hay entre un archivo lógico y un índice? ¿Estoy yo confundido con
respecto a los campos incluidos en el índice?
Un saludo y gracias a todos por vuestros comentarios,
Javier Mora
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad (
http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.
____________________________________________________
Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.