{"id":210,"date":"2012-04-07T19:16:35","date_gmt":"2012-04-07T19:16:35","guid":{"rendered":"http:\/\/www.alemdopeoplebooks.com.br\/site\/?p=210"},"modified":"2013-08-09T00:34:01","modified_gmt":"2013-08-09T00:34:01","slug":"meta-sql-selectall","status":"publish","type":"post","link":"https:\/\/www.alemdopeoplebooks.com.br\/site\/meta-sql-selectall\/","title":{"rendered":"Meta SQL %SelectAll"},"content":{"rendered":"<p>O que encontramos com bastante frequ\u00eancia, em c\u00f3digos que precisam buscar dados no banco, \u00e9 o <strong>CreateSQL<\/strong> utilizado da forma abaixo:<\/p>\n<p><span style=\"color: #000080;\"><strong>Local SQL<\/strong><\/span> &amp;sql_busca;<\/p>\n<p><span style=\"color: #000080;\"><strong>Local String<\/strong><\/span> &amp;str_sql;<\/p>\n<p><span style=\"color: #000080;\"><strong>Local String <\/strong><\/span>&amp;var, &amp;var1, &amp;var2, &amp;var3, &amp;etc&#8230;;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #99cc00;\">\/* disgraceira de SQL fixo com um monte de concatena\u00e7\u00e3o duzinfernu *\/<\/span><\/p>\n<p>&amp;str_sql = \u201c<span style=\"color: #ff0000;\">SELECT CAMPO1, CAMPO2, CAMPO3, etc&#8230;<\/span> \u201d;<\/p>\n<p>&amp;str_sql = &amp;str_sql | \u201c<span style=\"color: #ff0000;\">FROM TABELA A<\/span> \u201d;<\/p>\n<p>&amp;str_sql = &amp;str_sql | \u201c<span style=\"color: #ff0000;\">WHERE A.CAMPO1 = :1<\/span> \u201d;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #99cc00;\">\/* cria o SQL e passa o par\u00e2metro de busca*\/<\/span><\/p>\n<p>&amp;sql_busca = <span style=\"color: #000080;\"><strong>CreateSQL<\/strong><\/span>(&amp;str_sql, &amp;var);<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #99cc00;\">\/* lista remelenta de um bilh\u00e3o de vari\u00e1veis pra receber os valores encontrados *\/<\/span><\/p>\n<p><span style=\"color: #000080;\"><strong>While<\/strong><\/span> &amp;sql_busca.<span style=\"color: #000080;\"><strong>Fetch<\/strong>(&amp;var1, &amp;var2, &amp;var3, etc&#8230;)<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000080;\"><strong>End-while<\/strong><\/span>;<\/p>\n<p>O problema de utilizarmos a solu\u00e7\u00e3o acima \u00e9 o trabalho de digitar todo o <strong>SELECT<\/strong> fixo, atribu\u00ed-lo a uma vari\u00e1vel String e ainda ter que utilizar uma vari\u00e1vel diferente para cada campo selecionado, ou seja, <strong>se estamos selecionando 30 campos temos que criar 30 vari\u00e1veis<\/strong>.<\/p>\n<p>&nbsp;<\/p>\n<p>H\u00e1 uma maneira mais simples de realizar esta busca utilizando o <strong>Meta-SQL<\/strong> <strong>\u201c%SelectAll\u201d<\/strong> e um objeto da classe Record, conforme exemplo abaixo:<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #000080;\"><strong>Local SQL<\/strong><\/span> &amp;sql_busca;<\/p>\n<p><span style=\"color: #000080;\"><strong>Local Record<\/strong><\/span> &amp;rec;<\/p>\n<p><span style=\"color: #000080;\"><strong>Local String <\/strong><\/span>&amp;var;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #99cc00;\">\/* criamos uma Record standalone que ser\u00e1 passada como par\u00e2metro (ou seja, define qual tabela ser\u00e1 selecionada) para o Meta-SQL e tamb\u00e9m receber\u00e1 os dados encontrados *\/<\/span><\/p>\n<p>&amp;rec = <span style=\"color: #000080;\"><strong>CreateRecord<\/strong><\/span>(<span style=\"color: #000080;\"><strong>Record<\/strong>.TABELA);<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #99cc00;\">\/* agora criamos o objeto SQL utilizando o Meta-SQL. Lembrando que o %SelectAll, no momento da execu\u00e7\u00e3o, ser\u00e1 substitu\u00eddo por \u201cSELECT *TODOS_OS_CAMPOS* FROM TABELA\u201d *\/<\/span><\/p>\n<p>&amp;sql_busca = <span style=\"color: #000080;\"><strong>CreateSQL<\/strong><span style=\"color: #000000;\">(<span style=\"color: #ff0000;\">&#8220;SelectAll(:1) A WHERE A.CAMPO1 = :2&#8221;<\/span>);<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #99cc00;\">\/* executamos o SQL passando como par\u00e2metro a Record de onde os dados ser\u00e3o selecionados e quaisquer vari\u00e1veis que sejam utilizadas no WHERE *\/<\/span><\/p>\n<p>&amp;sql_busca.<span style=\"color: #000080;\"><strong>Execute<\/strong><span style=\"color: #000000;\">(&amp;rec, &amp;var);<\/span><\/span><\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #99cc00;\">\/* agora processamos o que foi encontrado pelo statement passando o Objeto Record para que ele receba os dados. Caso tiv\u00e9ssemos certeza que o SELECT retornaria somente uma linha poder\u00edamos utilizar um If ao inv\u00e9s de um While *\/<\/span><\/p>\n<p><span style=\"color: #000080;\"><strong>While<\/strong><\/span> &amp;sql_busca.<span style=\"color: #000080;\"><strong>Fetch<\/strong><\/span>(&amp;rec)<\/p>\n<p><span style=\"color: #99cc00;\">\u00a0\/* uma vez dentro do While (ou If), podemos acessar os valores encontrados utilizando apenas <strong>&amp;rec.CAMPO1.Value, <\/strong>ou qualquer outro campos da record<strong> <\/strong>normalmente *\/<\/span><\/p>\n<p><span style=\"color: #000080;\"><strong>End-while<\/strong>;<\/span><\/p>\n<p>&nbsp;<\/p>\n<p>Outra vantagem quanto a esta abordagem \u00e9 que, caso precisemos modificar a tabela para incluir campos e verificar outros dados, o SQL n\u00e3o precisar\u00e1 de qualquer altera\u00e7\u00e3o.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O que encontramos com bastante frequ\u00eancia, em c\u00f3digos que precisam buscar dados no banco, \u00e9 o CreateSQL utilizado da forma<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"colormag_page_container_layout":"default_layout","colormag_page_sidebar_layout":"default_layout","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[5,69],"tags":[37,32,13,113,38],"class_list":["post-210","post","type-post","status-publish","format-standard","hentry","category-peoplecode","category-peoplesoft","tag-selectall","tag-oracle","tag-oracle-peoplesoft","tag-peoplesoft","tag-sql"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.alemdopeoplebooks.com.br\/site\/wp-json\/wp\/v2\/posts\/210","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.alemdopeoplebooks.com.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.alemdopeoplebooks.com.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.alemdopeoplebooks.com.br\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.alemdopeoplebooks.com.br\/site\/wp-json\/wp\/v2\/comments?post=210"}],"version-history":[{"count":4,"href":"https:\/\/www.alemdopeoplebooks.com.br\/site\/wp-json\/wp\/v2\/posts\/210\/revisions"}],"predecessor-version":[{"id":338,"href":"https:\/\/www.alemdopeoplebooks.com.br\/site\/wp-json\/wp\/v2\/posts\/210\/revisions\/338"}],"wp:attachment":[{"href":"https:\/\/www.alemdopeoplebooks.com.br\/site\/wp-json\/wp\/v2\/media?parent=210"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.alemdopeoplebooks.com.br\/site\/wp-json\/wp\/v2\/categories?post=210"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.alemdopeoplebooks.com.br\/site\/wp-json\/wp\/v2\/tags?post=210"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}