no deje que los usuarios estropeen sus joins · no deje que los usuarios estropeen sus joins los...

16
SUMARIO Colaboraciones ¿Cuál es ese nombre? 2 No deje que los usuarios estropeen sus Joins 4 Los Joins no iguales (Theta) 6 Caso de aplicación del GoAnywhere para transferencia de documentos XML entre diferentes plataformas 8 Consulting SQL para actualizar campo de fichero físico con valor de otro fichero basándonos en campos Join comunes 11 Redundancia de código en la actualización por Join 12 Como automatizar de datos FTPS en Sistemas IBMi 15 ¿Cuál es ese nombre? No deje que los usuarios estropeen sus Joins Los Joins no iguales (Theta) Información sobre Power Systems, incluidos AS/400, iSeries y System i Año 26 - Octubre 2012 Nº 285 Precio: 7 Euros El origen de este artículo proviene de una breve conversación mientras tomaba un café durante el receso de una presenta- ción de un curso de Introducción al SQL. Más o menos fue algo así: - Tom: Con el ejecutor de scripts SQL del iSeries Navigator ¿cómo puedo obte- ner una lista de los campos de un archivo? - Yo: ¿Quieres decir las columnas de una tabla o vista? Tom: Si. Con el ejecutor de scripts SQL del iSeries Navigator, ¿cómo puedo obtener una lista de las columnas de una tabla o una vista? - Yo: Sencillo. Haz un SELECT * y se mostrarán los nombres de las columnas en la parte superior de las columnas. Está usted a tope y agobiado de trabajo y llega Harold de cuentas a cobrar pidien- do ayuda sobre una consulta que no fun- ciona correctamente. No es un mal tipo. Su mujer, sus hijos y su perro le adoran. Simplemente no entiende de informática. Ahora veremos una manera de ayudar a Harold a ayudarle a usted. El problema de Harold es que no sabe cómo realizar una combinación (Join) de es un sistema para almacenar información de campo del Join en el sistema. Es decir, una manera de almacenar el hecho de que campo C y el campo D de modo que Ha- rold no tenga que saber esa información. Y se la presentamos aquí. - sicos (tablas) con datos relacionados. y más… En la novela de George Orwell, Re- belión en la granja, se parte de la base de que todos los animales eran iguales. Si - bro se descubre que unos eran más iguales que otros. Puede que piense que todos los Joins son iguales, pero estaría equivoca- do. Los Joins de no iguales también tie- nen su utilidad. El equiJoin es la norma en la empresa. - ro) de facturas coincide con el número de cliente en una tabla maestra de clientes. Pero también es posible unir basándose en condiciones no coincidentes como dis- tinto, mayor que, menor que, mayor que o igual a, menor que o igual a. Los Joins de este tipo se conoce como “Joins theta”. Excepto en algún caso, los theta Joins no son muy útiles. Está excepción es al tratar de unir rangos de valores. Por ejemplo, piense que trabaja para una empresa que utiliza un sistema de contabilidad 445. Cada cuarto de año consta de dos periodos de cuatro semanas y un periodo de cinco semanas. Puede que tenga una tabla similar a esta. Para poder hacer un informe de ventas por periodo o trimestre, o para una perio- do o trimestre, necesita hacer un Join de equiJoin. Sigue en página 2 Sigue en página 4 Sigue en página 6

Upload: others

Post on 23-May-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

SUMARIO

Colaboraciones

¿Cuál es ese nombre? 2

No deje que los usuariosestropeen sus Joins 4

Los Joins no iguales (Theta) 6

Caso de aplicación del GoAnywhere para transferencia de documentos XML entrediferentes plataformas 8

Consulting

SQL para actualizar campo de fichero físico con valor de otro fichero basándonos en campos Join comunes 11

Redundancia de código en la actualización por Join 12

Como automatizar de datos FTPS en Sistemas IBMi 15

¿Cuál es ese nombre?

No deje que los usuarios estropeen sus Joins

Los Joins no iguales (Theta)

Información sobre Power Systems, incluidos AS/400, iSeries y System i

Año 26 - Octubre 2012 Nº 285 Precio: 7 Euros

El origen de este artículo proviene de una breve conversación mientras tomaba un café durante el receso de una presenta-ción de un curso de Introducción al SQL. Más o menos fue algo así:

- Tom: Con el ejecutor de scripts SQL del iSeries Navigator ¿cómo puedo obte-ner una lista de los campos de un archivo?

- Yo: ¿Quieres decir las columnas de

una tabla o vista?Tom: Si. Con el ejecutor de scripts

SQL del iSeries Navigator, ¿cómo puedo obtener una lista de las columnas de una tabla o una vista?

- Yo: Sencillo. Haz un SELECT * y se mostrarán los nombres de las columnas en la parte superior de las columnas.

Está usted a tope y agobiado de trabajo y llega Harold de cuentas a cobrar pidien-do ayuda sobre una consulta que no fun-ciona correctamente. No es un mal tipo. Su mujer, sus hijos y su perro le adoran. Simplemente no entiende de informática. Ahora veremos una manera de ayudar a Harold a ayudarle a usted.

El problema de Harold es que no sabe cómo realizar una combinación (Join) de

es un sistema para almacenar información de campo del Join en el sistema. Es decir,

una manera de almacenar el hecho de que

campo C y el campo D de modo que Ha-rold no tenga que saber esa información. Y se la presentamos aquí.

-sicos (tablas) con datos relacionados.

y más…

En la novela de George Orwell, Re-belión en la granja, se parte de la base de que todos los animales eran iguales. Si

-bro se descubre que unos eran más iguales que otros. Puede que piense que todos los Joins son iguales, pero estaría equivoca-do. Los Joins de no iguales también tie-nen su utilidad.

El equiJoin es la norma en la empresa. -

ro) de facturas coincide con el número de cliente en una tabla maestra de clientes. Pero también es posible unir basándose en condiciones no coincidentes como dis-tinto, mayor que, menor que, mayor que o igual a, menor que o igual a. Los Joins

de este tipo se conoce como “Joins theta”.Excepto en algún caso, los theta Joins

no son muy útiles. Está excepción es al tratar de unir rangos de valores.

Por ejemplo, piense que trabaja para una empresa que utiliza un sistema de contabilidad 445. Cada cuarto de año consta de dos periodos de cuatro semanas y un periodo de cinco semanas. Puede que tenga una tabla similar a esta.

Para poder hacer un informe de ventas por periodo o trimestre, o para una perio-do o trimestre, necesita hacer un Join de

equiJoin.

Sigue en página 2

Sigue en página 4

Sigue en página 6

Page 2: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

COLABORACIONES

El origen de este artículo proviene de una breve con-versación mientras tomaba un café durante el receso de una presentación de un curso de Introducción al SQL. Más o menos fue algo así:

- Tom: Con el ejecutor de scripts SQL del iSeries Na-vigator ¿cómo puedo obtener una lista de los campos de un archivo?

- Yo: ¿Quieres decir las columnas de una tabla o vista?Tom: Si. Con el ejecutor de scripts SQL del iSeries

Navigator, ¿cómo puedo obtener una lista de las colum-nas de una tabla o una vista?

- Yo: Sencillo. Haz un SELECT * y se mostrarán los nombres de las columnas en la parte superior de las co-lumnas.

- Tom: Pues no. Escogí tomar las etiquetas de visua-lización (display labels) en lugar de los nombres, porque los nombres no tienen casi sentido. ¿Existe alguna manera de obtener una visualización del registro (record layout)?

Tom estaba entre la espada y la pared. Podía tener un

pero ninguna idea del nombre de las columnas, o podía tener nombres de columna sin sentido como encabeza-mientos de columna y adivinar que era cada columna.

nombres de columna un poco crípticos. Algunas veces de -

dor único (ahora vemos un ejemplo). Por cierto, está es una de las razones por las que la gente ahí fuera no nos cree cuando decimos que tenemos una base de datos re-

Así que, ¿cómo podemos obtener una vista de registro (record layout) con el ejecutor de scripts SQL del iSeries Navigator con scripts SQL de ejecución?

Toda la información sobre los objetos de la base de datos del sistema se mantiene en ciertas tablas de base de datos en QSYS y QSYS2. Estas tablas también son

del sistema”.

-

nombres de columnas que hemos mencionado. Aún cuan-

SQL?

La función COALESCE que aparece en el código, so--

nos de que siempre devuelva algún tipo de descripción. En caso de que no se encuentre una descripción de texto devolverá el encabezamiento de columna.

2 Octubre 2012ATTITUDES Nº 285

select dbipos as pos, dbifld as name, coalesce(trim(dbitxt), trim(dbihdg)) as text, dbiitp as dds_type, dbityp as sql_type, dbifln as length, dbinsc as dec, trim(dbilfl) as long_name from qsys/qadbifld where dbilib = 'RPGINTRO' and dbifil = 'CUSTOMER' order by pos;

Page 3: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

COLABORACIONES

3 Octubre 2012ATTITUDES Nº 285

CREATE PROCEDURE GET_LAYOUT ( IN SCHEMA_NAME CHAR(10) , IN TABLE_NAME CHAR(10) ) DYNAMIC RESULT SETS 1 LANGUAGE SQL SPECIFIC GET_LAYOUT NOT DETERMINISTIC READS SQL DATA CALLED ON NULL INPUT PROGRAM TYPE SUB SET OPTION ALWBLK = *ALLREAD , ALWCPYDTA = *OPTIMIZE , COMMIT = *NONE , DECRESULT = (31, 31, 00) , DFTRDBCOL = *NONE , DYNDFTCOL = *NO , DYNUSRPRF = *USER , SRTSEQ = *HEX BEGIN DECLARE C1 CURSOR FOR select dbipos as pos, dbifld as name, coalesce(trim(dbitxt), trim(dbihdg)) as text, dbiitp as dds_type, dbityp as sql_type, dbifln as length, dbinsc as dec, trim(dbilfl) as long_name from qsys/qadbifld where dbilib = upper(SCHEMA_NAME) and dbifil = upper(TABLE_NAME) order by pos for read only ; OPEN C1 ; SET RESULT SETS CURSOR C1 ; END ;

Page 4: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

COLABORACIONES

4 Octubre 2012ATTITUDES Nº 285

Ahora para obtener nuestro diseño de registro con la ejecución de sentencias SQL, solo tenemos que llamar al

procedimiento almacenado como mostramos a continua-ción y obtendremos el mismo resultado que antes.

ERRATAEn el caso de que este trabajando con el iSeries Na-

vigator, elegir la opción “Ver Resultados en una ventana nueva” ( en el menú de Opciones), antes de llamar al pro-

-ño del registro en una ventana distinta mientras construye la sentencia SQL.

Con el ejecutor de scripts SQL, puede seleccionar el “Encabezado para las columnas del resultado” (nombres de columnas o etiquetas de columnas) seleccionando Con-

-cionar la pestaña “Otros”.

Eche un vistazo a toda la información disponible en

La tabla QSYS2/SYSCOLUMNS es una vista de la

Un esquema creado mediante la sentencia CREATE SCHEMA contendrá vistas de la base de datos de referen-cias cruzadas del sistema con una preselección para el es-quema. Por ejemplo, las vistas sólo contienen información de los objetos de la base de datos en el esquema.

Espero que le encuentre alguna utilidad a este consejo en su caja de herramientas.

call get_layout('rpgintro', 'customer');

Está usted a tope y agobiado de trabajo y llega Harold de cuentas a cobrar pidiendo ayuda sobre una consulta que no funciona correctamente. No es un mal tipo. Su mujer, sus hijos y su perro le adoran. Simplemente no entiende de informática. Ahora veremos una manera de ayudar a Harold a ayudarle a usted.

El problema de Harold es que no sabe cómo realizar una -

sita es un sistema para almacenar información de campo del Join en el sistema. Es decir, una manera de almacenar el hecho

campo D de modo que Harold no tenga que saber esa informa-ción. Y se la presentamos aquí.

-tos relacionados.

y más…

uno o más detalles de la orden de venta por un número común de orden de venta.

un cliente por un número de compañía común y un número de cliente.

Page 5: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

COLABORACIONES

5 Octubre 2012ATTITUDES Nº 285

Nº ejemplares: 8.500Precio ejemplar: 7,00 euros (Anual 60 )Difusión: Andorra, Portugal,

Italia y EspañaPublicidad: Tel. 93 319 17 23

Edita: American Top Tools, S.L.Via Laietana, 2008003 Barcelona

Tel. 93 319 16 12 - Fax 93 319 17 55E-mail: [email protected]

Depósito Legal: B-18.455-1993 Imprime Graficas AltagrafPublicación: 10 ediciones

Alcance: 28/00

artículo por un número común de artículo.Esto que parece tan sencillo para usted, no lo es tanto

modo:

lógico sin clave que Harold puede consultar como si con-sultase un archivo físico. Harold es víctima de una ilusión en la que todos los datos están almacenados en un gran

hacer Joins. Harold puede seleccionar campos (colum-

a sus tareas más acuciantes.Tenga compasión de Harold. No le haga unir archivos

físicos.

create view slsordv1 as (select oh.ORDERNO, oh.CUSTPO, oh.STATUS as OrderStat, oh.ORDERDATE, oh.SHIPDATE, od.LINENO, od.ITEMNO, it.DESCRIP as ItemDesc, it.CLASS as ItemClass, it.COST as BaseCost, it.PRICE as BasePrice, it.MINORDQTY, it.MAKEBUY, it.WEIGHT, it.DISCOUNT, it.VMI, it.ACTIVE, od.QTYORDERED, od.QTYSHIPPED, od.PRICE, oh.COMPANYNO, oh.CUSTOMERNO, cus.CUSNAM, cus.BILLSTREET, cus.BILLCITY, cus.BILLSTATE, cus.BILLZIP, cus.SHIPSTREET, cus.SHIPCITY, cus.SHIPSTATE, cus.SHIPZIP, cus.TYPE as CusType from salesordh as oh left outer Join salesordd as od using (orderno) left outer Join customers as cus using (companyno, customerno) left outer Join items as it using (itemno) )

Page 6: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

COLABORACIONES

6 Septiembre 2012ATTITUDES Nº 284

En la novela de George Orwell, Rebelión en la granja, se parte de la base de que todos los animales eran iguales.

que unos eran más iguales que otros. Puede que piense que todos los Joins son iguales, pero estaría equivocado. Los Joins de no iguales también tienen su utilidad.

El equiJoin es la norma en la empresa. Un número de

número de cliente en una tabla maestra de clientes. Pero también es posible unir basándose en condiciones no

coincidentes como distinto, mayor que, menor que, mayor que o igual a, menor que o igual a. Los Joins de este tipo se conoce como “Joins theta”.

Excepto en algún caso, los theta Joins no son muy úti-les. Está excepción es al tratar de unir rangos de valores.

Por ejemplo, piense que trabaja para una empresa que utiliza un sistema de contabilidad 445. Cada cuarto de año consta de dos periodos de cuatro semanas y un periodo de cinco semanas. Puede que tenga una tabla similar a esta.

Y una tabla de envíos similar a está:

Year Period Beginning Date Ending Date Quarter2011 12 2011-11-27 2012-01-31 42012 1 2012-01-01 2012-01-28 12012 2 2012-01-29 2012-02-25 12012 3 2012-02-26 2012-03-31 12012 4 2012-04-01 2012-04-28 2

Shipment Date Item Price Quantity1015 2012-01-20 AB101 2.00 21016 2012-01-27 BZ873 4.50 11017 2012-01-30 DL297 1.00 31018 2012-02-03 AB202 1.25 2

Page 7: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

COLABORACIONES

7 Septiembre 2012ATTITUDES Nº 284

Para poder hacer un informe de ventas por periodo o trimestre, o para una periodo o trimestre, necesita hacer un

-

No tengo ninguna duda de que existen otros usos para los theta Joins que yo no he podido imaginar. Tengo mu-

cho que aprender todavía.

Y el resultado sería similar a éste:

select per.year, per.period, sum(s.quantity) as Qty, sum(s.quantity * s.price) as Amount from shipments as s Join accountingperiods as per on s.date between per.begindate and per.enddate group by per.year, per.period order by per.year, per.period

Year Period Qty Amount2012 1 3 8.502012 2 5 5.50

Page 8: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

8 Octubre 2012ATTITUDES Nº 285

“Modesto” descubre múltiples usos para GoAnywhere Director

GoAnywhere Director: Caso de éxito

Industria: Gobierno

Compañía: Ayuntamiento de Modesto, California

Muchos de nuestros clientes buscan soluciones para la Transferencia de Datos Gestionada (MFT) porque han decidido que ha llegado el momento de invertir en mejorar el intercambio de información sensible de forma más segura y efectiva.

En otras ocasiones, como el caso del Ayuntamiento de Modesto, California se encuentran con la necesidad de cumplir con requisitos que actores externos con los que intercambian datos les obliga a cumplir y dejando poco margen de actuación que seguro acaba en una actualización de sus procesos.

Problema: Informes en XML

El reto que inició la búsqueda de una solución MFT (Managed File Transfer) por parte del ayuntamiento fue uno muy extendido entre las organizaciones institucionales. En el estado de California, todas las organizaciones gubernamentales están obligadas a comunicar los datos de las nóminas al

complejo formato XML.

El administrador de TI y analista de sistemas del ayuntamiento, el señor Michael Bumanlag, al frente de este proyecto tenía pocos conocimientos sobre XML así que se lanzó a la búsqueda de herramientas que pudieran ayudar a acelerar el proceso de informes. En primer lugar pensaron en soluciones a medida pero los costes de consultoría las situaban fuera de su presupuesto.

Realizando un trial del GoAnywhere Director, Bumanlag descubrió que le permitiría crear los ficheros CalPERS requeridos y, que gracias a unas pocasindicaciones del proveedor técnico, el proyecto estuvo diseñado y funcionando perfectamente en muy poco tiempo.

Otros consultores vendedores dijeron que sería muy difícil de llevar a cabo en la empresa admitió Bumanlag, pero gracias a GoAnywhere Director,

el proceso fue un éxito y fue mucho más sencillo de lo que esperábamos

Mediante el GoAnywhere Director, el proyecto CalPERS genera múltiples consultas contra la base de datos de la nómina del Ayuntamiento de Modesto para crear el archivo XML requerido y posteriormente integra esas consultas

El Director encripta el archivo XML con OpenPGP, lo envía al servidor SFTP en CalPERS y confirma que el mensaje fue recibido y aceptado .

Estaba impresionado, ya que muchas otras instituciones de California están todavía batallando para construir su sistema desde cero y están gastando tanto tiempo y dinero en ello mientras que GoAnywhere Director solucionó el problema rápida y económicamente.

Una de las mayores ventajas que Bumanlag ve en GoAnywhere Director es su versatilidad.

Gran versatilidad

Nosotros compramos GoAnywhere para ayudarnos con el proyecto CalPERS pero puede hacer tanto más. Siempre estamos encontrando nuevos proyectos que GoAnywhere Director puede abordar sin problemasBumanlag.

Por ejemplo, cuando el ayuntamiento incorporó un nuevo sistema de ERP, el personal de informática necesitaba un método sencillo, fiable y automatizado para traspasar toda la información archivada en el menor tiempo posible.

En nuestros viejos sistema de finanzas, tuvimos contratado a tiempo parcial a un operador de tarde para traspasar de forma manual está información Pero nuestros archivos de facturación de suministros se generaban aún más tarde, cuando el operador ya se había marchado, por lo que GoAnywhere Director nos dio la posibilidad de automatizar este y otros procesos de transferencia para nuestro nuevo sistema de ERP .

con la facilidad de conectar con otros sistemas mediante FTP y SFTP que nos proporciona el propio GoAnywhere Director y los trabajos que realiza entre

Michael BumanlagAdministrador TI en Ayuntamiento de Modesto California

Page 9: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

9 Octubre 2012ATTITUDES Nº 285

Compramos GoAnywhere para ayudarnos con el proyecto CalPERS pero puede hacer tanto más. Siempre estamos encontrando nuevos proyectos que GoAnywhere Director puede abordar sin problemas

Integración de Email

Bumanlag cita características que hanmarcado la diferencia en los proceso de trabajo de su departamento. En primer

mantener informado de cualquier cambio a todo el personal involucrado en un proceso.

GoAnywhere Director puede leer un correo, llamar a un proyecto, enviar un email de confirmación y coordinarlo con otros beneficiarios de esta información.

Es más, ya que los proyectos pueden ser iniciados vía email, en lugar de tener que entrar a través del interface gráfico de la aplicación GoAnywhere, los usuarios que pueden aprovecharse del GoAnywhere Director sin tener acceso directo son muchos más.

Comunicación multi-sistema

El Ayuntamiento de Modesto gestiona proyectos y procesos en múltiples y diferentes servidores, con horarios distintos, lo que dificulta el control del estado de los proyectos.

Más atractivo aún es que el Director puede comunicarse con otros sistemas y gestionarse desde un solo punto

Como ya hemos mencionado, uno de los principales proyectos que Bumanlag maneja es la gestión de facturación de suministros a los residentes. Según Bumanlag, el personal debe enviar lasfacturas a un proveedor externo a través de un FTP. Ese distribuidor las procesa y las convierte a PDF. Cuando el trabajo batch está completado, el distribuidor envía un email a Bumanlag para que este pueda recuperar los archivos ya convertidos.

La gestión de GoAnywhere Directorsobre este proyecto, permite añadir otro nivel de seguridad y tranquilidad sobre la correcta realización del proyecto, gracias a la posibilidad de auto-reintentar los envíos FTP erróneos fallidos y su comunicaciónBumanlag.

anterior creaba logs pero llegar a ellos no era nada sencillo y además no sabíamos con certeza si el proceso se había completado correctamente. ¿Porqué habrías de mirar en el log si ni siquiera sabes si el trabajo ha fallado? Afortunadamente, con GoAnywhere está perfectamente resuelto.

GoAnywhere Director ha permitido mejorar los flujos de trabajo entre la División de Facturación de Suministros (DFS) del departamento de atención al cliente y el personal de informática.

Cuando su proveedor encargado de la impresión estaba listo para imprimir las facturas, enviaba un email al personal de la DFS para recibir la aprobación

El seguimiento ycontrol llevaba mucho tiempoGoAnywhere Director localiza el

email y me notifica inmediatamente, lo que evita retrasos en nuestro proceso de impresión . Además de automatizar por completo el proceso, también compara la lista de archivos que el distribuidor dice que deberían estar ahí con lo que el programa realmente encuentra y notifica las diferencias a Bumanlag y luego continúa buscando archivos que queden rezagados.

Conexiones multiplataforma

El Ayuntamiento de Modesto también encontró otra característica muy útiles que el GoAnywhere Director puede comunicarse con casi cualquier base de datos.

La mayor parte de los datos que Bumanlag gestiona procede de bases de datos Oracle y DB2, pero también utilizan la BD Progress OpenEdge. El

personal de TI prácticamente había tirado la toalla en tratar de integrar los datos de esta última porque ninguna de las herramientas que tenían podía comunicarse con ella. Una vezimplementado el GoAnywhere Directorel problema quedó solucionado y en estos momentos la base de datos OpenEdge forma parte de los flujos de trabajo normales.

Interés de oficinas locales

Otras instituciones de ámbito local también han comenzado a trabajar con GoAnywhere Director.

Trey Lackey gestiona procesos en el departamento de permisos de obra y una de sus tareas es buscar en la base de datos permisos recientemente aprobados para enviar una encuesta a las partes interesadas. Ahora utiliza Director para buscar de forma automática esos permisos y enviar las encuestas sin intervención manual.

Bumanlag enumera otras propiedades ventajosas que aporta el GoAnywhere Director:

Puede trabajar con diferentes tipos de archivos y comunicarse con diferentes sistemas y plataformas

Sus job logs muestran exactamente que está sucediendo.

Su funcionalidad es fiable. Una vez en marcha y funcionando, funciona.

La comunicación por Email, en especial al iniciar proyectos y verificar que se han finalizado, ahorra mucho tiempo y despistes.

Bumanlag resume su experiencia con GoAnywhere Director de este modo: Teniendo en cuenta lo asequible que

es el GoAnywhere es y lo versátil y funcional que es, simplemente lo hace demasiado fácil

Más atractivo aún es que el GoAnywhere Director puede comunicarse con otros sistemas y gestionarse desde un solo punto de control en su

Page 10: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

10 Octubre 2012ATTITUDES Nº 285

Sobre el Departamento de informática del Ayuntamiento de Modesto, California.

El departamento de tecnologías de la información proporciona servicios a través de las tecnologías de la información a los ciudadanos de Modesto así como a la propia organización interna del Ayuntamiento. Entres estos servicios.

Entre esto servicios destacan la administración de los sistemas informáticos, servicios telefónicos, sistema de información geográfica (GIS) y la propia web del ayuntamiento.

También proporciona planificación a largo plazo de tecnologías, gestión de proyectos, soporte de sus aplicaciones, desarrollo web, programación, administración de base de datos, operaciones de computadores, integración de redes y gestión de los redes de PC y automatización de tareas de oficina.

www.modestogov.com

Sobre GoAnywhere Director

GoAnywhere Director gestiona de forma más eficiente el intercambio de datos a través de una innovadora aproximación centralizadora permitiendo la automatización de múltiples procesos.

Permite a las empresas conectarse con prácticamente cualquier sistema (interno o externo) e intercambiar datos de forma segura através de protocolos de seguridad estándar entre los que se encuentran los siguientes: SFTP (SSH), SCP, FTP/S (SSL/TLS), HTTP/S, SMTP, POP3, IMAP y AS2.

GoAnywhere Director permite también la encriptación de los datos mediante sistemas de encriptación Open PGP y envíos con compresión ZIP y encriptación AES para mayor protección de la información sensible.

Para más información consultar con American Top Tools

Page 11: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

11 Octubre 2012ATTITUDES Nº 285

CONSULTING

PREGUNTA USUARIO:¿Es posible utilizar SQL para actualizar un campo de una base de datos de un fichero físico con un valor

de otro fichero basándonos en valores de campo Join comunes?

RESPUESTA ATTSi. Es una pregunta muy frecuente y la respuesta es muy

interesante y debería conocerse. Veamos un ejemplo.-

mero de regiones de venta. Necesitan actualizar el fichero maestro de clientes sustituyendo el número de región exis-tente con un nuevo número de región. Por ejemplo, todos los clientes de la región 4 son reasignados a la región 1 y todos los clientes de la región 5 son reasignados a la región

3. Supongamos además que hay cientos de dichas reasigna-ciones, no vaya a ser que me envíen un email señalándome que sería muy rápido ejecutar un par de sentencias de actua-lización. Estas reasignaciones son almacenadas en un fiche-

de región antiguo y número de región nuevo.

Este SQL cumple la tarea.

update customer as c set region = (select newregion from fixes where oldregion = c.region) where exists (select * from fixes where oldregion = c.region)

Page 12: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

12 Octubre 2012ATTITUDES Nº 285

Una cosa es cierta. Ya tiene identificado el problema. EsParece que exista una cierta redundancia en la consulta,

número de región en aquellos registros de clientes cuyas

regiones no están siendo reasignadas.

En este caso, si la región está siendo reasignada, el va-lor de la región se establece con el nuevo valor de región

--

gión se establece con el valor actual. La función COALES-CE, que escoge el primer valor no nulo de una lista hace esto posible. Una cosa que me encanta sobre esta técnica es que el primer argumento de COALESCE es un mandato

-mita más y más sentencias embebidas, haciendo más po-tente el SQL.

Una gran diferencia entre dos consultas es que la prime-ra solo actualiza los registros cambiados, mientras que la segunda consulta actualiza todos los registros en el fichero físico.

PREGUNTA USUARIO:Revisando su anterior respuesta hay algo que se me escapa ¿Tienen que tener código redundante todas las

actualizaciones mediante Joins necesariamente?

RESPUESTA ATTEntiendo la confusión. Vamos a profundizar un poco

más. Este es el ejemplo al que se refiere usted.

update customer as c set region = coalesce((select newregion from fixes where oldregion = c.region), region)

Page 13: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

La respuesta directa a su pregunta es NO. Las actualiza-ciones realizadas mediante Joins, no necesariamente tienen que tener código redundante. Depende del objetivo a con-seguir. Si usted quiere que el UPDATE cambie todos los registros (filas) del fichero (tabla/vista), no es necesaria la cláusula WHERE, ya que el propósito de la cláusula WHE-RE es especificar que filas deben ser actualizadas. Pero si tan solo quiere actualizar algunas de las filas, entonces SI, debe incluir una cláusula WHERE en la sentencia UPDA-TE.

VEÁMOSLO CON MÁS DETALLESupongamos que usted tiene un archivo maestro de dis-

tribuidores que incluye un código según el tipo de distri-buidor. El código nunca ha sido cargado pero necesita ac-tualizar el código basándose en un archivo que fue creado desde la hoja de cálculo de un usuario. El archivo maestro se llama VENDORS. El fichero de las actualizaciones se llama VENDORUPDT y contiene dos campos únicamente: Número ID de distribuidor y código de tipo de distribuidor. Veamos algunos escenarios.

1. El fichero VENDORUPDT contiene una fila para cada distribuidor. Todas las filas en VENDOR serán actua-lizadas. En este caso, no hay necesidad de que se realice una cláusula WHERE en la sentencia UPDATE.

13 Octubre 2012ATTITUDES Nº 285

Es cierto que existe cierta redundancia. Tanto las cláu-sulas SET como WHERE de la sentencia UPDATE se refie-

update customer as c set region = (select newregion from fixes where oldregion = c.region) where exists (select * from fixes where oldregion = c.region)

from fixes where oldregion = c.region)

update vendors as v1 set v1.type = (select v2.type from vendorupdt as v2 where v2.id = v1.id)

Page 14: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

14 Octubre 2012ATTITUDES Nº 285

update vendors as v1 set v1.type = (select v2.type from vendorupdt as v2 where v2.id = v1.id)

update vendors as v1 set v1.type = coalesce( (select v2.type from vendorupdt as v2 where v2.id = v1.id), 2)

update vendors as v1 set v1.type = (select v2.type from vendorupdt as v2 where v2.id = v1.id) where v1.id in (select v3.id from vendorupdt as v3)

-

distribuidores que no tengan referencia en VENDORUPDT

obtendrán un código de tipo de distribuidor nulo. Ya que to-

WHERE en el UPDATE.

-

distribuidores que no tengan referencia en VENDORUPDT

obtendrán un código de tipo de distribuidor con valor 2. Ya

cláusula WHERE en el UPDATE.

-

-

rán actualizadas, la sentencia UPDATE ahora si requiere la cláusula WHERE.

Page 15: No deje que los usuarios estropeen sus Joins · No deje que los usuarios estropeen sus Joins Los Joins no iguales ... que todos los animales eran iguales. Si ... Puede que piense

15 Octubre 2012ATTITUDES Nº 285

-

encontradas en VENDORUPDT y si están ubicados en el

-lizadas, la sentencia UPDATE ahora si requiere la cláusula WHERE.

Puede observar que los dos últimos ejemplos contienen la cláusula WHERE, pero no la redundancia que observo en el

-

-te con la expresión SET, pero no tiene porque serlo.

update vendors as v1 set v1.type = (select v2.type from vendorupdt as v2 where v2.id = v1.id) where v1.state = 'MS' and v1.id in (select v3.id from vendorupdt as v3)

PREGUNTA USUARIO:Tengo que transferir datos usando el protocolo FTPS (Con cifrado SSL). El receptor de los datos sólo

admite este método de transferencia de archivos. ¿Hay alguna manera de automatizar transferencias de datos FTPS con IBM i? Si es así, ¿Cuál es la mejor forma de hacerlo?

RESPUESTA ATT

(que se incluye con el sistema operativo), entonces puede

Puede especificar SECCNN(SSL) en la línea de mandatos

http://publib.boulder.ibm.com/infocenter/iseries/v5r3/in-

Hay otras alternativas en paquetes externos como puede ser el GoAnywhere de Linoma Software, que sin duda tra-bajan mejor y más fácil aunque naturalmente tendran que pagar por ellos.