{"id":13098,"date":"2015-10-13T17:07:57","date_gmt":"2015-10-14T00:07:57","guid":{"rendered":"http:\/\/clartechsolutions.com\/?p=13098"},"modified":"2023-03-01T01:43:18","modified_gmt":"2023-03-01T01:43:18","slug":"creando-un-informe-en-apex-5-0-a-partir-de-una-region-de-contenido-dinamico-pl-sql","status":"publish","type":"post","link":"https:\/\/kiusi.com\/en\/creando-un-informe-en-apex-5-0-a-partir-de-una-region-de-contenido-dinamico-pl-sql\/","title":{"rendered":"Creando un Informe en Apex 5.0 a partir de una Regi\u00f3n de contenido din\u00e1mico PL\/SQL"},"content":{"rendered":"<p>Si bien Oracle Application Express nos ofrece muchos tipos de Informes para ser usados cuando estamos creando nuestras aplicaciones web, pero a veces no se ajusta a lo que necesitamos, por ejemplo puede darse el caso de que tengamos una aplicaci\u00f3n construida con un m\u00f3dulo PL\/SQL y queremos reutilizar ese m\u00f3dulo, entonces para ello necesitamos crear un informe de tipo PL\/SQL din\u00e1mico.<\/p>\n<p>En mi opini\u00f3n, nunca est\u00e1 de m\u00e1s saber c\u00f3mo podemos crear en Oracle Apex Informes para mostrar datos de una tabla en forma din\u00e1mica, usando c\u00f3digo PL\/SQL, pero, hay que ser conscientes, de que se requiere de mucho detalle y hay que plantearse si es conveniente o no utilizar este tipo de Informes, ya que con los asistentes de Apex podemos crear Informes de forma muy r\u00e1pida y sencilla, sin tanto esfuerzo.<\/p>\n<p>Vamos a trabajar con la tabla DEMO_CUSTOMERS,&nbsp; que pertenece a la aplicaci\u00f3n demo \u201cSample Database Application\u201d de Apex cuando se instala.<\/p>\n<p>Para mostrar los datos de la tabla en un informe creado din\u00e1micamente vamos a hacer uso del paquete APEX_ITEM que nos permite crear elementos din\u00e1micamente basados en una consulta SQL.<\/p>\n<p>En nuestra consulta SQL vamos a hacer uso de dos tipos de funciones:<\/p>\n<ol>\n<li>HIDDEN: Usamos esta funci\u00f3n para generar din\u00e1micamente elementos ocultos.<\/li>\n<\/ol>\n<pre>APEX_ITEM.HIDDEN(\n &nbsp;&nbsp; p_idx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; NUMBER,\n &nbsp;&nbsp; p_value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT\n &nbsp;&nbsp; p_attributes&nbsp; IN&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT NULL,\n &nbsp;&nbsp; p_item_id&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT NULL,\n &nbsp;&nbsp; p_item_label&nbsp; IN&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT NULL\n) RETURN VARCHAR2;<\/pre>\n<p style=\"padding-left: 40px;\">2. DISPLAY_AND_SAVE: Usamos esta funci\u00f3n para mostrar un elemento como texto, pero guardamos su valor en el estado de sesi\u00f3n.<\/p>\n<pre>APEX_ITEM.DISPLAY_AND_SAVE(&nbsp;&nbsp;&nbsp; \np_idx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; NUMBER,&nbsp;&nbsp;&nbsp; \np_value&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT NULL,&nbsp;&nbsp;&nbsp; \np_item_id&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT NULL,&nbsp;&nbsp;&nbsp; \np_item_label&nbsp; IN&nbsp;&nbsp;&nbsp; VARCHAR2 DEFAULT NULL)&nbsp;&nbsp;&nbsp; \nRETURN VARCHAR2;\n\n<strong>p_idx:<\/strong> Indica el n\u00famero de identificador de la variable htmldb_application_global. El rango de valores es de 1 a 50. Por ejemplo 1 crea F01 y 2 crea F02.<\/pre>\n<p>Adem\u00e1s, para que se dibuje la informaci\u00f3n en la regi\u00f3n vamos a hacer uso de dos paquetes: HTP o HTF<\/p>\n<p><u>Paquete htp<\/u>: (Procedimientos de hipertexto) &#8211; Son procedimientos que generan etiquetas HTML. Por ejemplo, el procedimiento <em>htp.htmlopen<\/em> genera la etiqueta de apertura &lt;HTML&gt;.<\/p>\n<p><u>Paquete htf<\/u>: Para cada procedimiento htp que genera una etiqueta HTML hay una funci\u00f3n htf con id\u00e9nticos par\u00e1metros. Las funciones no generan directamente la salida en una p\u00e1gina web. En lugar de eso, pasan su salida como valores de retorno a los estados que le han sido invocados.<\/p>\n<h3><strong>Crear Regi\u00f3n de Contenido Din\u00e1mico PL\/SQL<\/strong><\/h3>\n<p>Creamos una aplicaci\u00f3n de escritorio, luego creamos una p\u00e1gina en blanco y en ella creamos una regi\u00f3n de contenido din\u00e1mico PL\/SQL que la llamaremos \u201cClientes\u201d.<\/p>\n<p>Lo m\u00e1s importante aqu\u00ed es el c\u00f3digo PL\/SQL en esta regi\u00f3n ya que es la que se encargar\u00e1 de armar el Informe en forma din\u00e1mica.<\/p>\n<p>Ingresamos el c\u00f3digo PL\/SQL y hacemos clic en el bot\u00f3n Guardar.<\/p>\n<pre>declare\ncursor c_cus\nis\nselect apex_item.hidden (1,cus.customer_id) id\n, apex_item.display_and_save (2, cus.cust_first_name) firstname\n, apex_item.display_and_save (3, cus.cust_last_name) lastname\n, apex_item.display_and_save (4, cus.cust_street_address1) address\n, apex_item.display_and_save (5, cus.cust_city) city\n, apex_item.display_and_save (6, cus.cust_state) state\n, apex_item.display_and_save (7, cus.cust_postal_code) postalcode\n, apex_item.display_and_save (8, cus.cust_email) email\n, apex_item.display_and_save (9, phone_number1) phonenumber\n, apex_item.display_and_save (10, credit_limit) creditlimit\nfrom demo_customers cus\n, demo_states sta\nwhere cus.cust_state = sta.st\norder by cus.customer_id;\nbegin\nfor r_cus in c_cus\nloop\nhtp.p(r_cus.id);\nhtp.p(r_cus.firstname);\nhtp.p(r_cus.lastname);\nhtp.p(r_cus.address);\nhtp.p(r_cus.city);\nhtp.p(r_cus.state);\nhtp.p(r_cus.postalcode);\nhtp.p(r_cus.email);\nhtp.p(r_cus.phonenumber);\nhtp.p(r_cus.creditlimit);\nend loop;\nend;<\/pre>\n<p>Si ejecutamos la p\u00e1gina podremos ver el reporte sin ning\u00fan formato, adem\u00e1s todos los registros se muestran uno a continuaci\u00f3n del otro.<\/p>\n<p><img data-recalc-dims=\"1\" fetchpriority=\"high\" decoding=\"async\" class=\"alignnone size-full wp-image-13099\" src=\"https:\/\/i0.wp.com\/clartechsolutions.com\/wp-content\/uploads\/2019\/04\/img1-1.jpg?resize=750%2C141\" alt=\"\" width=\"750\" height=\"141\"><\/p>\n<h3><strong>Crear tabla HTML desde el c\u00f3digo PL\/SQL<\/strong><\/h3>\n<p>Para crear la tabla haremos uso del paquete HTP.<\/p>\n<pre>htp.tableopen &nbsp;&nbsp;&nbsp; -- genera la etiqueta &lt;TABLE&gt;\nhtp.tablerowopen -- genera la etiqueta &lt;TR&gt;\nhtp.tablerowclose -- genera la etiqueta &lt;\/TR&gt;\nhtp.tableclose &nbsp;&nbsp; -- genera la etiqueta &lt;\/TABLE&gt;\n\n<\/pre>\n<p>Para ello vamos a cambiar la parte del c\u00f3digo que est\u00e1 dentro del bloque begin-end, agregando la tabla y una fila para cada registro, por el hecho que est\u00e1 dentro del loop.<\/p>\n<pre>declare\ncursor c_cus\nis\nselect apex_item.display_and_save(1, cus.customer_id) id\n, apex_item.display_and_save (2, cus.cust_first_name) firstname\n, apex_item.display_and_save (3, cus.cust_last_name) lastname\n, apex_item.display_and_save (4, cus.cust_street_address1) address\n, apex_item.display_and_save (5, cus.cust_city) city\n, apex_item.display_and_save (6, cus.cust_state) state\n, apex_item.display_and_save (7, cus.cust_postal_code) postalcode\n, apex_item.display_and_save (8, cus.cust_email) email\n, apex_item.display_and_save (9, phone_number1) phonenumber\n, apex_item.display_and_save (10, credit_limit) creditlimit\nfrom demo_customers cus\n, demo_states sta\nwhere cus.cust_state = sta.st\norder by cus.customer_id;\nbegin\nhtp.tableopen; -- genera la etiqueta &lt;TABLE&gt;\nfor r_cus in c_cus\nloop\nhtp.tablerowopen; -- genera la etiqueta &lt;TR&gt;\nhtp.tabledata (r_cus.id); -- genera las etiquetas &lt;TD&gt; y &lt;\/TD&gt;\nhtp.tabledata(r_cus.id);\nhtp.tabledata(r_cus.firstname);\nhtp.tabledata(r_cus.lastname);\nhtp.tabledata(r_cus.address);\nhtp.tabledata(r_cus.city);\nhtp.tabledata(r_cus.state);\nhtp.tabledata(r_cus.postalcode);\nhtp.tabledata(r_cus.email);\nhtp.tabledata(r_cus.phonenumber);\nhtp.tabledata(r_cus.creditlimit);\nhtp.tablerowclose; -- genera la etiqueta &lt;\/TR&gt;\nend loop;\nhtp.tableclose; -- genera la etiqueta &lt;\/TABLE&gt;\nend;<\/pre>\n<p>Al ejecutar la p\u00e1gina podemos ver que hemos armado la tabla HTML desde dentro del c\u00f3digo PL\/SQL y cada registro se muestra en una fila diferente.<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" class=\"alignnone size-full wp-image-13100\" src=\"https:\/\/i0.wp.com\/clartechsolutions.com\/wp-content\/uploads\/2019\/04\/img2-1.jpg?resize=750%2C318\" alt=\"\" width=\"750\" height=\"318\"><\/p>\n<h3><strong>Asignamos estilos CSS dentro del c\u00f3digo PL\/SQL<\/strong><\/h3>\n<p>Para darle una mejor visualizaci\u00f3n a nuestro informe en nuestra aplicaci\u00f3n Apex, vamos a asignar algunos estilos en la tabla, fila y celdas.<\/p>\n<p>Sintaxis Procedimiento TABLEOPEN<\/p>\n<pre>HTP.TABLEOPEN(&nbsp;&nbsp; \ncborder&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp; DEFAULT NULL&nbsp;&nbsp; \ncalign&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp; DEFAULT NULL,&nbsp;&nbsp; \ncnowrap&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp; DEFAULT NULL,&nbsp;&nbsp; \ncclear&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp; DEFAULT NULL &nbsp; \ncattributes&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; VARCHAR2&nbsp;&nbsp; DEFAULT NULL);<\/pre>\n<p>Por ejemplo, este procedimiento genera:<\/p>\n<pre>&lt;TABLE \"cborder\" NOWRAP ALIGN=\"calign\" CLEAR=\"cclear\" cattributes&gt;<\/pre>\n<p>En nuestro c\u00f3digo PL\/SQL asignamos a la tabla los siguientes atributos:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>Border: 2<\/li>\n<li>Width: 100%<\/li>\n<li>Cellpadding=10<\/li>\n<li>Text=#000000 (negro)<\/li>\n<li>bgcolor=#F3F3F3<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre>htp.tableopen (cattributes =&gt; 'border=2 width=100% cellpadding=10 text=#000 bgcolor=#F3F3F3');<\/pre>\n<p>Reemplazamos el c\u00f3digo PL\/SQL en la regi\u00f3n de contenido din\u00e1mico, por el siguiente c\u00f3digo:<\/p>\n<pre>declare\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cursor c_cus\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select apex_item.display_and_save(1, cus.customer_id) id\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , apex_item.display_and_save (2, cus.cust_first_name) firstname\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , apex_item.display_and_save (3, cus.cust_last_name) lastname\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , apex_item.display_and_save (4, cus.cust_street_address1) address\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , apex_item.display_and_save (5, cus.cust_city) city\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , apex_item.display_and_save (6, cus.cust_state) state\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , apex_item.display_and_save (7, cus.cust_postal_code) postalcode\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , apex_item.display_and_save (8, cus.cust_email) email\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , apex_item.display_and_save (9, phone_number1) phonenumber\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , apex_item.display_and_save (10, credit_limit) creditlimit&nbsp;&nbsp; \n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; from demo_customers cus\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; , demo_states sta\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; where cus.cust_state = sta.st\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; order by cus.customer_id;\nbegin\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.htmlopen; -- genera la etiqueta &lt;HTML&gt;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.headopen; -- genera la etiqueta &lt;THEAD&gt;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.title('Reporte de Clientes'); -- genera la etiqueta &lt;TITLE&gt; y &lt;\/TITLE&gt;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.headclose; -- genera la etiqueta &lt;\/HEAD&gt;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.bodyopen; -- genera la etiqueta &lt;BODY&gt;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.header(1, 'Reporte de Clientes'); -- genera la etiqueta &lt;H1&gt; y &lt;\/H1&gt;\n       htp.tableopen (cattributes =&gt; 'border=2 width=100% cellpadding=10 text=#000000 bgcolor=#F3F3F3'); -- genera la etiqueta &lt;TABLE&gt;\n  &nbsp;&nbsp;&nbsp;&nbsp; htp.tablerowopen (cattributes =&gt; 'bgcolor=\"#216BB9\"'); -- genera la etiqueta &lt;TR&gt;\n       htp.tableheader(cvalue =&gt; '&lt;font face=\"ARIAL\" size=\"2.25\" color=\"WHITE\"&gt;' || 'Cliente ID'); -- genera la etiqueta &lt;TH&gt; y &lt;\/TH&gt;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tableheader(cvalue =&gt; '&lt;font face=\"ARIAL\" size=\"2.25\" color=\"WHITE\"&gt;' || 'Nombre');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tableheader(cvalue =&gt; '&lt;font face=\"ARIAL\" size=\"2.25\" color=\"WHITE\"&gt;' || 'Apellido');\n       htp.tableheader(cvalue =&gt; '&lt;font face=\"ARIAL\" size=\"2.25\" color=\"WHITE\"&gt;' || 'Direcci\u00f3n');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tableheader(cvalue =&gt; '&lt;font face=\"ARIAL\" size=\"2.25\" color=\"WHITE\"&gt;' || 'Ciudad');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tableheader(cvalue =&gt; '&lt;font face=\"ARIAL\" size=\"2.25\" color=\"WHITE\"&gt;' || 'Estado');\n       htp.tableheader(cvalue =&gt; '&lt;font face=\"ARIAL\" size=\"2.25\" color=\"WHITE\"&gt;' || 'C\u00f3digo Postal');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tableheader(cvalue =&gt; '&lt;font face=\"ARIAL\" size=\"2.25\" color=\"WHITE\"&gt;' || 'Email');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tableheader(cvalue =&gt; '&lt;font face=\"ARIAL\" size=\"2.25\" color=\"WHITE\"&gt;' || 'Tel\u00e9fono');\n       htp.tableheader(cvalue =&gt; '&lt;font face=\"ARIAL\" size=\"2.25\" color=\"WHITE\"&gt;' || 'L\u00edmite de Cr\u00e9dito');\n   &nbsp;&nbsp;&nbsp;&nbsp;htp.tablerowclose; -- genera la etiqueta &lt;\/TR&gt;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tablerowopen; -- genera la etiqueta &lt;TR&gt;\n  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for r_cus in c_cus\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; loop\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tabledata(r_cus.id);\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tabledata(r_cus.firstname,&nbsp; cattributes=&gt;'align=left');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tabledata(r_cus.lastname, cattributes=&gt;'align=left');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tabledata(r_cus.address, cattributes=&gt;'align=left');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tabledata(r_cus.city, cattributes=&gt;'align=left');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tabledata(r_cus.state, cattributes=&gt;'align=left');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tabledata(r_cus.postalcode, cattributes=&gt;'align=center');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tabledata(r_cus.email, cattributes=&gt;'align=left');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tabledata(r_cus.phonenumber, cattributes=&gt;'align=left');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tabledata(r_cus.creditlimit, cattributes=&gt;'align=center');\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tablerowclose;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; end loop;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.tablerowclose; -- genera la etiqueta &lt;\/TR&gt;\n &nbsp;&nbsp; &nbsp;&nbsp; htp.tableclose; -- genera la etiqueta &lt;\/TABLE&gt;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.bodyclose; -- genera la etiqueta &lt;\/BODY&gt;\n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; htp.htmlclose; -- genera la etiqueta &lt;\/HTML&gt;\nend;<\/pre>\n<p>Podemos ejecutar la p\u00e1gina y visualizar los cambios en la regi\u00f3n de Informe, mostrando la tabla con algunos estilos CSS.<\/p>\n<p><img data-recalc-dims=\"1\" decoding=\"async\" data-attachment-id=\"16034\" data-permalink=\"https:\/\/kiusi.com\/en\/creando-un-informe-en-apex-5-0-a-partir-de-una-region-de-contenido-dinamico-pl-sql\/img3-1\/\" data-orig-file=\"https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?fit=1573%2C679&amp;ssl=1\" data-orig-size=\"1573,679\" data-comments-opened=\"1\" data-image-meta=\"{&quot;credit&quot;:&quot;Clarisa Maman Orfali&quot;,&quot;created_timestamp&quot;:&quot;1444319239&quot;}\" data-image-title=\"img3-1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?fit=750%2C324&amp;ssl=1\" class=\"alignnone wp-image-16034 size-full\" src=\"https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?resize=750%2C324&#038;ssl=1\" alt=\"\" width=\"750\" height=\"324\" srcset=\"https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?w=1573&amp;ssl=1 1573w, https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?resize=300%2C129&amp;ssl=1 300w, https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?resize=1024%2C442&amp;ssl=1 1024w, https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?resize=768%2C332&amp;ssl=1 768w, https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?resize=1536%2C663&amp;ssl=1 1536w, https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?resize=18%2C8&amp;ssl=1 18w, https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?resize=1200%2C518&amp;ssl=1 1200w, https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/img3-1.jpg?resize=1568%2C677&amp;ssl=1 1568w\" sizes=\"(max-width: 750px) 100vw, 750px\" \/><\/p>\n<h3><strong>Conclusion<\/strong><\/h3>\n<p>En este art\u00edculo hemos podido ver c\u00f3mo podemos crear Informes generados din\u00e1micamente a partir de un c\u00f3digo PL\/SQL, adem\u00e1s de aprender a utilizar los paquetes HTP y HTF para estructurar la informaci\u00f3n dentro de la regi\u00f3n en la p\u00e1gina de Apex y finalmente aprendimos a asignar estilos CSS desde PL\/SQL.<\/p>","protected":false},"excerpt":{"rendered":"<p>Si bien Oracle Application Express nos ofrece muchos tipos de Informes para ser usados cuando estamos creando nuestras aplicaciones web, pero a veces no se ajusta a lo que necesitamos, por ejemplo puede darse el caso de que tengamos una aplicaci\u00f3n construida con un m\u00f3dulo PL\/SQL y queremos reutilizar ese m\u00f3dulo, entonces para ello necesitamos<a class=\"more-link\" href=\"https:\/\/kiusi.com\/en\/creando-un-informe-en-apex-5-0-a-partir-de-una-region-de-contenido-dinamico-pl-sql\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Creando un Informe en Apex 5.0 a partir de una Regi\u00f3n de contenido din\u00e1mico PL\/SQL&#8221;<\/span><\/a><\/p>","protected":false},"author":132749711,"featured_media":16460,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"jetpack_seo_schema_type":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":true},"categories":[121913,121930],"tags":[121903,121950,121951,121952,121886,121953],"class_list":["post-13098","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","category-oracle-apex-5-0","tag-apex","tag-estilos-css","tag-formato","tag-informe","tag-oracle","tag-pl-sql","entry"],"jetpack_publicize_connections":[],"jetpack_likes_enabled":true,"jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/paMvMS-3pg","amp_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/kiusi.com\/wp-content\/uploads\/2015\/10\/Destacada-Creando-un-Informe-en-Apex-5.0.jpg?fit=2949%2C1735&ssl=1","_links":{"self":[{"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/posts\/13098","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/users\/132749711"}],"replies":[{"embeddable":true,"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/comments?post=13098"}],"version-history":[{"count":3,"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/posts\/13098\/revisions"}],"predecessor-version":[{"id":16461,"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/posts\/13098\/revisions\/16461"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/media\/16460"}],"wp:attachment":[{"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/media?parent=13098"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/categories?post=13098"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kiusi.com\/en\/wp-json\/wp\/v2\/tags?post=13098"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}