{"id":738,"date":"2020-03-08T17:18:12","date_gmt":"2020-03-08T21:48:12","guid":{"rendered":"http:\/\/gregorgonzalez.com.ve\/blog\/?p=738"},"modified":"2020-03-08T17:19:48","modified_gmt":"2020-03-08T21:49:48","slug":"buscar-texto-en-procedimientos-funciones-objetos-de-oracle","status":"publish","type":"post","link":"https:\/\/gregorgonzalez.com.ve\/blog\/buscar-texto-en-procedimientos-funciones-objetos-de-oracle\/","title":{"rendered":"Buscar texto en procedimientos, funciones, objetos de oracle"},"content":{"rendered":"<p>Hubo momentos en que necesitaba buscar si una funci\u00f3n se encontraba dentro de alg\u00fan procedimiento, paquete o si se usaba dentro de otra funci\u00f3n. Usando toad para oracle, se puede realizar b\u00fasquedas en todos los objetos con la opci\u00f3n \u00abobject search\u00bb, pero si da problemas o no trabajas con toad, tambi\u00e9n se puede realizar las b\u00fasquedas con comandos sql.<\/p>\n<p>Para buscar en objetos (paquetes, funciones, procedimientos, etc) podemos buscar en dba_source o all_source.<\/p>\n<p>dba_source: todos los objetos de la base de datos en donde ejecutemos el sql.<br \/>\nall_source: todos los objetos accesibles por el usuario conectado actual.<\/p>\n<p>Ejemplo:<\/p>\n<pre class=\"lang:plsql decode:true \">SELECT name, line, type, text\r\nFROM dba_source\r\nWHERE upper(text) like upper('%TEXTO_BUSQUEDA%') escape '\\'\r\n<\/pre>\n<p class=\"Standard\"><span lang=\"ES\">Esto nos indica el nombre del objeto, l\u00ednea donde se encontr\u00f3 el criterio, el tipo de objeto (funci\u00f3n, paquete, procedimiento, etc.) y en el text se encuentra todo el cuerpo que define el objeto.<\/span><\/p>\n<p>&nbsp;<\/p>\n<p><strong>En vistas<\/strong><\/p>\n<p>Si necesitas buscar en vistas, puedes usar esta otra opci\u00f3n.<\/p>\n<p>all_views: Todas las vistas incluidas las internas del sistema de oracle.<br \/>\nuser_views: Vistas que pertenezcan al usuario actual<\/p>\n<p>Para oracle mayor o igual a la versi\u00f3n &gt;= 12 es muy simple con el siguiente sql:<\/p>\n<pre class=\"lang:plsql decode:true \">SELECT *\r\nFROM all_views\r\nWHERE lower(text) LIKE '%abc%';\r\n<\/pre>\n<p>&nbsp;<\/p>\n<p>Ahora para versiones anteriores a la versi\u00f3n 12, se necesita varios pasos adicionales porque el campo text en las vistas son establecidas como long y no podemos ejecutar una b\u00fasqueda de texto, ya que al convertir a string y superar el l\u00edmite de 4000 caracteres, nos generar\u00e1 un error. Para evitar esto se genera una tabla temporal conteniendo esa columna en texto y ya podremos realizar la b\u00fasqueda por dicho criterio:<\/p>\n<pre class=\"lang:plsql decode:true\">-- Creamos la tabla temporal como copia de las vistas:\r\nCREATE GLOBAL TEMPORARY TABLE vistas_tmp AS SELECT view_name nombre_vista, to_lob(text) texto_vista FROM user_views;\r\n\r\n-- Ingresamos los datos de la vista en la tabla temporal:\r\nINSERT INTO vistas_tmp SELECT view_name nombre_vista, to_lob(text) texto_vista FROM user_views;\r\n\r\n-- Realizamos la consulta de la tabla temporal:\r\nSELECT * FROM vistas_tmp WHERE upper(texto_vista) LIKE upper('%TEXTO_BUSQUEDA%')  ESCAPE '\\';\r\n\r\n-- Eliminamos la tabla temporal\r\nDROP TABLE vistas_tmp;\r\n<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hubo momentos en que necesitaba buscar si una funci\u00f3n se encontraba dentro de alg\u00fan procedimiento, paquete o si se usaba dentro de otra funci\u00f3n. Usando toad para oracle, se puede realizar b\u00fasquedas en todos los objetos con la opci\u00f3n \u00abobject search\u00bb, pero si da problemas o no trabajas con toad, tambi\u00e9n se puede realizar las [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":660,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[239],"tags":[277,278,279],"_links":{"self":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/738"}],"collection":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/comments?post=738"}],"version-history":[{"count":3,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/738\/revisions"}],"predecessor-version":[{"id":741,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/738\/revisions\/741"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/media\/660"}],"wp:attachment":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/media?parent=738"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/categories?post=738"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/tags?post=738"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}