{"id":276,"date":"2021-05-31T11:52:41","date_gmt":"2021-05-31T11:52:41","guid":{"rendered":"http:\/\/jplatz.com.br\/syntax\/?p=276"},"modified":"2021-05-31T11:52:43","modified_gmt":"2021-05-31T11:52:43","slug":"informix-alterar-multiplas-linhas-e-multiplas-colunas-com-subselect","status":"publish","type":"post","link":"https:\/\/jplatz.com.br\/syntax\/2021\/05\/31\/informix-alterar-multiplas-linhas-e-multiplas-colunas-com-subselect\/","title":{"rendered":"INFORMIX Alterar M\u00faltiplas Linhas e M\u00faltiplas Colunas com SubSelect"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>UPDATE princing SET\n(price, increasepercentage, datenewrate)\n=\n(SELECT nrpp.increasepercentage * princing.price AS price\n      , nrpp.increasepercentage\n      , SYSDATE\n FROM newrateperproduct AS nrpp\n WHERE nrpp.productid = pricing.productid\n   AND nrpp.increasepercentage IS NOT NULL\n)\nWHERE EXISTS\n(SELECT 1\n FROM newrateperproduct AS nrpp\n WHERE nrpp.productid = pricing.productid\n   AND nrpp.increasepercentage IS NOT NULL\n);<\/code><\/pre>\n\n\n\n<p>Minha jornada com bancos de dados iniciou-se com o sensacional INFORMIX, n\u00e3o por que eu queria, mas naquela \u00e9poca tratava-se se um processo de downsizing onde t\u00ednhamos que iniciar a desativa\u00e7\u00e3o de um Mainframe UNISYS. O novo sistema escolhido pela empresa trazia consigo o requisito de utilizar tamb\u00e9m este banco de dados.<\/p>\n\n\n\n<p>Dentre as in\u00fameras caracter\u00edsticas, a capacidade de processar update com &#8220;subselects&#8221; de forma genial com uma sintaxe praticamente ANSII me encheu os olhos e me proporcionou uma evolu\u00e7\u00e3o fant\u00e1stica na programa\u00e7\u00e3o com SQL puro. Cheguei a desenvolver sistemas inteiros eliminando a necessidade de linguagem de programa\u00e7\u00e3o, somente SHELL para interface com usu\u00e1rio e SQL statements para c\u00e1lculos e transforma\u00e7\u00f5es de dados. O update com subselect tomou um importante papel neste caso.<\/p>\n\n\n\n<p>Toda vez que aprendo um banco de dados novo eu acabou invariavelmente procurando saber se ele tem suporte a esta capacidade. Com o MySQL voc\u00ea alcan\u00e7a este resultado com o Update Join, o que n\u00e3o \u00e9 uma sintaxe t\u00e3o nativa assim, mas o pessoal da MySQL AB mandou muito bem neste caso, eu at\u00e9 j\u00e1 escrevi um artigo aqui no Blog demonstrando isso.<\/p>\n\n\n\n<p>Explicando um pouco sobre a sintaxe, a grande sacada do INFORMIX \u00e9 permitir mesmo que sejam postas v\u00e1rias colunas para serem alteradas, quando for mais de uma coluna o requerimento \u00e9 recobrir as colunas com par\u00eanteses e pronto. No subselect ent\u00e3o basta fazer o &#8220;match&#8221; quantitivo das colunas e, \u00e9 claro o match de tipos. Naturalmente a atribui\u00e7\u00e3o das colunas \u00e9 feita por posicionamento simplesmente.<\/p>\n\n\n\n<p>Outra sacada que voc\u00ea n\u00e3o pode ignorar \u00e9 que, para n\u00e3o incorrer em erros devemos repetir o subselect na cl\u00e1usula WHERE do UPDATE para que tenhamos a mesma equival\u00eancia de registros tanto subselect quanto no update.<\/p>\n\n\n\n<p>E o que mais? Mais nada!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Minha jornada com bancos de dados iniciou-se com o sensacional INFORMIX, n\u00e3o por que eu queria, mas naquela \u00e9poca tratava-se se um processo de downsizing onde t\u00ednhamos que iniciar a desativa\u00e7\u00e3o de um Mainframe UNISYS. O novo sistema escolhido pela empresa trazia consigo o requisito de utilizar tamb\u00e9m este banco de dados. Dentre as in\u00fameras [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19,20,50],"tags":[125,123,122,124],"class_list":["post-276","post","type-post","status-publish","format-standard","hentry","category-database","category-informix","category-sql","tag-cross-table-update","tag-join","tag-update","tag-update-join"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/276","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/comments?post=276"}],"version-history":[{"count":1,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/276\/revisions"}],"predecessor-version":[{"id":277,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/posts\/276\/revisions\/277"}],"wp:attachment":[{"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/media?parent=276"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/categories?post=276"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jplatz.com.br\/syntax\/wp-json\/wp\/v2\/tags?post=276"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}