{"id":6162,"date":"2022-05-13T06:00:19","date_gmt":"2022-05-13T05:00:19","guid":{"rendered":"https:\/\/bestdatasolutions.es\/?p=6162"},"modified":"2022-07-08T11:27:53","modified_gmt":"2022-07-08T10:27:53","slug":"powerbi-dataflows-2","status":"publish","type":"post","link":"https:\/\/bestdatasolutions.es\/en\/blog\/powerbi-dataflows-2\/","title":{"rendered":"Power BI dataflows"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"6162\" class=\"elementor elementor-6162 elementor-6161\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-d32b5ac elementor-section-full_width elementor-section-height-default elementor-section-height-default\" data-id=\"d32b5ac\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-no\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-c1dc6d3\" data-id=\"c1dc6d3\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-911012a elementor-widget elementor-widget-theme-post-featured-image elementor-widget-image\" data-id=\"911012a\" data-element_type=\"widget\" data-widget_type=\"theme-post-featured-image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1920\" height=\"500\" src=\"https:\/\/bestdatasolutions.es\/wp-content\/uploads\/cursores-pl-sql.jpg\" class=\"attachment-full size-full wp-image-6174\" alt=\"cursores-pl-sql\" srcset=\"https:\/\/bestdatasolutions.es\/wp-content\/uploads\/cursores-pl-sql.jpg 1920w, https:\/\/bestdatasolutions.es\/wp-content\/uploads\/cursores-pl-sql-300x78.jpg 300w, https:\/\/bestdatasolutions.es\/wp-content\/uploads\/cursores-pl-sql-1024x267.jpg 1024w, https:\/\/bestdatasolutions.es\/wp-content\/uploads\/cursores-pl-sql-768x200.jpg 768w, https:\/\/bestdatasolutions.es\/wp-content\/uploads\/cursores-pl-sql-1536x400.jpg 1536w\" sizes=\"(max-width: 1920px) 100vw, 1920px\" title=\"\">\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5d1c2c13 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5d1c2c13\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-5aae2e0d\" data-id=\"5aae2e0d\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-1a3ffa42 elementor-author-box--layout-image-left elementor-author-box--align-left elementor-author-box--image-valign-middle elementor-author-box--avatar-yes elementor-author-box--name-yes elementor-author-box--biography-yes elementor-widget elementor-widget-author-box\" data-id=\"1a3ffa42\" data-element_type=\"widget\" data-widget_type=\"author-box.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-author-box\">\n\t\t\t\t\t\t\t<a href=\"https:\/\/www.linkedin.com\/in\/fherreraglez\/\" target=\"_blank\" class=\"elementor-author-box__avatar\" rel=\"noopener\">\n\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/bestdatasolutions.es\/wp-content\/uploads\/avatar_user_12_1652275195.jpg\" alt=\"Picture of Francisco Herrera\" loading=\"lazy\" title=\"\">\n\t\t\t\t<\/a>\n\t\t\t\n\t\t\t<div class=\"elementor-author-box__text\">\n\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.linkedin.com\/in\/fherreraglez\/\" target=\"_blank\" rel=\"noopener\">\n\t\t\t\t\t\t<h4 class=\"elementor-author-box__name\">\n\t\t\t\t\t\t\tFrancisco Herrera\t\t\t\t\t\t<\/h4>\n\t\t\t\t\t<\/a>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-author-box__bio\">\n\t\t\t\t\t\tBusiness Intelligence Consultant | Data Specialist\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-41a959e0 elementor-widget elementor-widget-heading\" data-id=\"41a959e0\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-large\">Other Articles:<\/h3>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-6c75b22c\" data-id=\"6c75b22c\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-5795bde9 elementor-widget elementor-widget-theme-post-title elementor-page-title elementor-widget-heading\" data-id=\"5795bde9\" data-element_type=\"widget\" data-widget_type=\"theme-post-title.default\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-xl\">Power BI dataflows<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-561b31d1 elementor-widget elementor-widget-post-info\" data-id=\"561b31d1\" data-element_type=\"widget\" data-widget_type=\"post-info.default\">\n\t\t\t\t\t\t\t<ul class=\"elementor-inline-items elementor-icon-list-items elementor-post-info\">\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-869d2fb elementor-inline-item\" itemprop=\"datePublished\">\n\t\t\t\t\t\t<a href=\"https:\/\/bestdatasolutions.es\/en\/2022\/05\/13\/\">\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-calendar\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M12 192h424c6.6 0 12 5.4 12 12v260c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V204c0-6.6 5.4-12 12-12zm436-44v-36c0-26.5-21.5-48-48-48h-48V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H160V12c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v52H48C21.5 64 0 85.5 0 112v36c0 6.6 5.4 12 12 12h424c6.6 0 12-5.4 12-12z\"><\/path><\/svg>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-date\">\n\t\t\t\t\t\t\t\t\t\t<time>13\/05\/2022<\/time>\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7476169 elementor-share-buttons--view-icon-text elementor-share-buttons--skin-gradient elementor-share-buttons--shape-square elementor-grid-0 elementor-share-buttons--color-official elementor-widget elementor-widget-share-buttons\" data-id=\"7476169\" data-element_type=\"widget\" data-widget_type=\"share-buttons.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-grid\" role=\"list\">\n\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_linkedin\" role=\"button\" tabindex=\"0\" aria-label=\"Share on linkedin\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-linkedin\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z\"><\/path><\/svg>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-share-btn__text\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__title\">\n\t\t\t\t\t\t\t\t\t\tLinkedIn\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_facebook\" role=\"button\" tabindex=\"0\" aria-label=\"Share on facebook\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-facebook\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z\"><\/path><\/svg>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-share-btn__text\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__title\">\n\t\t\t\t\t\t\t\t\t\tFacebook\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_twitter\" role=\"button\" tabindex=\"0\" aria-label=\"Share on twitter\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-twitter\" viewBox=\"0 0 512 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z\"><\/path><\/svg>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-share-btn__text\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__title\">\n\t\t\t\t\t\t\t\t\t\tTwitter\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-grid-item\" role=\"listitem\">\n\t\t\t\t\t\t<div class=\"elementor-share-btn elementor-share-btn_whatsapp\" role=\"button\" tabindex=\"0\" aria-label=\"Share on whatsapp\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__icon\">\n\t\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fab-whatsapp\" viewBox=\"0 0 448 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M380.9 97.1C339 55.1 283.2 32 223.9 32c-122.4 0-222 99.6-222 222 0 39.1 10.2 77.3 29.6 111L0 480l117.7-30.9c32.4 17.7 68.9 27 106.1 27h.1c122.3 0 224.1-99.6 224.1-222 0-59.3-25.2-115-67.1-157zm-157 341.6c-33.2 0-65.7-8.9-94-25.7l-6.7-4-69.8 18.3L72 359.2l-4.4-7c-18.5-29.4-28.2-63.3-28.2-98.2 0-101.7 82.8-184.5 184.6-184.5 49.3 0 95.6 19.2 130.4 54.1 34.8 34.9 56.2 81.2 56.1 130.5 0 101.8-84.9 184.6-186.6 184.6zm101.2-138.2c-5.5-2.8-32.8-16.2-37.9-18-5.1-1.9-8.8-2.8-12.5 2.8-3.7 5.6-14.3 18-17.6 21.8-3.2 3.7-6.5 4.2-12 1.4-32.6-16.3-54-29.1-75.5-66-5.7-9.8 5.7-9.1 16.3-30.3 1.8-3.7.9-6.9-.5-9.7-1.4-2.8-12.5-30.1-17.1-41.2-4.5-10.8-9.1-9.3-12.5-9.5-3.2-.2-6.9-.2-10.6-.2-3.7 0-9.7 1.4-14.8 6.9-5.1 5.6-19.4 19-19.4 46.3 0 27.3 19.9 53.7 22.6 57.4 2.8 3.7 39.1 59.7 94.8 83.8 35.2 15.2 49 16.5 66.6 13.9 10.7-1.6 32.8-13.4 37.4-26.4 4.6-13 4.6-24.1 3.2-26.4-1.3-2.5-5-3.9-10.5-6.6z\"><\/path><\/svg>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-share-btn__text\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-share-btn__title\">\n\t\t\t\t\t\t\t\t\t\tWhatsApp\t\t\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-56263e9 elementor-widget elementor-widget-text-editor\" data-id=\"56263e9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Today we will talk about Dataflows, the new Power BI tool for ETL that allows you to work with large volumes of data and then be able to visualize them.&nbsp;<\/p>\n<p>Don&#8217;t miss the video where we explain everything!<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eb8e798 elementor-widget elementor-widget-image\" data-id=\"eb8e798\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"371\" src=\"https:\/\/bestdatasolutions.es\/wp-content\/uploads\/cursores.jpg\" class=\"attachment-large size-large wp-image-6179\" alt=\"cursores\" srcset=\"https:\/\/bestdatasolutions.es\/wp-content\/uploads\/cursores.jpg 800w, https:\/\/bestdatasolutions.es\/wp-content\/uploads\/cursores-300x139.jpg 300w, https:\/\/bestdatasolutions.es\/wp-content\/uploads\/cursores-768x356.jpg 768w\" sizes=\"(max-width: 800px) 100vw, 800px\" title=\"\">\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5416f96 elementor-widget elementor-widget-text-editor\" data-id=\"5416f96\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Sintetizando, un cursor va a actuar como una especie de loop que <b>recorrer\u00e1 la consulta especificada fila por fila<\/b>, retorn\u00e1ndonos el valor que se haya indicado en dicha consulta, almacenando estos valores en tablas temporales (que, como veremos m\u00e1s adelante, se abrir\u00e1n y se cerrar\u00e1n al ejecutar el cursor) y, previa indicaci\u00f3n en la sentencia, <b>nos devolver\u00e1 una lista de valores<\/b>. M\u00e1s adelante veremos esto de manera m\u00e1s detallada.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8be5009 elementor-widget elementor-widget-text-editor\" data-id=\"8be5009\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Podemos diferenciar dos tipos de cursores, los impl\u00edcitos y los expl\u00edcitos:<\/p><p><b>CURSORES IMPL\u00cdCITOS<\/b><\/p><p>Los cursores impl\u00edcitos son aquellos que <b>nos devuelven un solo registro<\/b> al ejecutar la sentencia SELECT. Los utilizamos t\u00edpicamente para operaciones tipo <b>SELECT \u2026 INTO<\/b>. Los llamamos impl\u00edcitos porque ya <b>son definidos de manera intr\u00ednseca por el propio PL\/SQL<\/b> y no hace falta declararlos mediante la sentencia \u201cCURSOR\u201d, la cual define que la variable que estamos creando es un cursor. Por ejemplo:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5cccdd3 elementor-widget elementor-widget-code-highlight\" data-id=\"5cccdd3\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-sql line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-sql\">\n\t\t\t\t\t<xmp>SET SERVEROUTPUT ON;\r\ndeclare\r\n  vdescripcion VARCHAR2(50);\r\nbegin\r\n  SELECT DESCRIPCION INTO vdescripcion from ALUMNOS WHERE CURSO_ALU = '4\u00ba';\r\n  dbms_output.put_line('La lectura del cursor es: ' || vdescripcion);\r\nend;\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-adcf62f elementor-widget elementor-widget-text-editor\" data-id=\"adcf62f\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>En la anterior sentencia, como vemos, simplemente declaramos una variable que va a ser la descripci\u00f3n, ejecutamos un SELECT \u2026 <b>INTO<\/b> que va a meter dentro del valor de la variable la consulta correspondiente a la descripci\u00f3n del alumno donde el c\u00f3digo es el 4\u00ba curso e imprimir\u00e1 el resultado \u00fanico mediante la sentencia <b>dbms_output.put_line.<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5a6615d elementor-widget elementor-widget-code-highlight\" data-id=\"5a6615d\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-sql line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-sql\">\n\t\t\t\t\t<xmp>DECLARE\r\n       lsalario empleados.salario%TYPE;\r\n       ldni empleados.dni%TYPE;\r\n     BEGIN\r\n       SELECT salario, dni\r\n       INTO lsalario, ldni\r\n       FROM empleados\r\n       WHERE nombre = 'Jose'\r\n       AND apellidos = 'Antunez Puntos';\r\n       \/* Resto de sentencias del bloque *\/\r\n     END;<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4db2bcd elementor-widget elementor-widget-text-editor\" data-id=\"4db2bcd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>En este ejemplo, recibiremos como output las variables salario y dni del empleado.<\/p><p>A parte de lo mencionado anteriormente, cuando usamos cursores impl\u00edcitos debemos tener en cuenta varias cosas. Por ejemplo, es importante que la variable declarada tenga exactamente el <b>mismo tipo de dato que la columna llamada en la tabla<\/b>. Es decir, no podemos declarar una variable tipo FLOAT que reciba valores tipo CHAR, etc., ya que esto har\u00eda saltar un error en la consulta. Solemos anticiparnos a ese error a\u00f1adiendo <b>%TYPE<\/b> al final de la declaraci\u00f3n de la variable, de manera que PL\/SQL asigne el tipo de la variable a su tipo de origen.\u00a0<\/p><p>Importante tambi\u00e9n es destacar que si tenemos un cursor abierto y los datos de origen cambian, esto no se ver\u00e1 reflejado en el cursor hasta cerrarlo y ejecutarlo de nuevo.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3974e2b elementor-widget elementor-widget-text-editor\" data-id=\"3974e2b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Por otro lado, como los cursores impl\u00edcitos solo pueden devolver una fila, si la consulta devuelve ninguna o m\u00e1s de una, nos devolver\u00e1 una <b>verificaci\u00f3n de excepci\u00f3n<\/b>; en el primer caso, encontraremos <b>NO_DATA_FOUND<\/b> y en el segundo <b>TOO_MANY_ROWS<\/b>.<\/p><p>Normalmente <b>suelen usarse m\u00e1s a menudo<\/b> los cursores impl\u00edcitos, ya que <b>son m\u00e1s r\u00e1pidos<\/b> de procesar y su<b> codificaci\u00f3n es m\u00e1s<\/b> <b>limpia<\/b> que con los expl\u00edcitos. Recordemos que PL\/SQL es un <b>lenguaje interpretado<\/b>, lo cual quiere decir que su procesamiento va l\u00ednea por l\u00ednea.\u00a0<\/p><p>Esto se traduce de una manera simple, a menos l\u00edneas, menos tiempo total de procesamiento. Sin embargo, en el caso de que una query falle a la hora de buscar un registro, el cursor expl\u00edcito es m\u00e1s eficiente, ya que al declarar el cursor se evita que aparezcan excepciones, y en PL\/SQL el manejo de excepciones es relativamente costoso.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c25d991 elementor-widget elementor-widget-text-editor\" data-id=\"c25d991\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><b>CURSORES EXPL\u00cdCITOS<\/b><\/p><p>Si queremos que una consulta nos devuelva m\u00e1s de una fila, debemos generar un bloque de c\u00f3digo que incluya la definici\u00f3n previa de la variable <b>CURSOR<\/b>, lo cual se conoce tambi\u00e9n como <b>cursor expl\u00edcito<\/b>.\u00a0<\/p><p>La metodolog\u00eda se sigue a trav\u00e9s de 4 pasos; declarar el cursor, abrirlo con la instrucci\u00f3n OPEN, leer cada una de las filas de la consulta con FETCH y cerrarlo mediante la instrucci\u00f3n CLOSE:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dc9799a elementor-widget elementor-widget-text-editor\" data-id=\"dc9799a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>&#8211; Declaraci\u00f3n del cursor:<\/p><p>Como el resto de variables, el cursor se va a declarar a trav\u00e9s de la secci\u00f3n <b>DECLARE<\/b>. Tras esto, definiremos el nombre que tendr\u00e1 el cursor y la consulta que va a ejecutar a trav\u00e9s de la cl\u00e1usula SELECT. Por ejemplo:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3142563 elementor-widget elementor-widget-code-highlight\" data-id=\"3142563\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-sql line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-sql\">\n\t\t\t\t\t<xmp>CURSOR nombre_cursor IS instrucci\u00f3n_SELECT\r\n\r\nCURSOR nombre_cursor(param1 tipo1, ..., paramN tipoN) IS instrucci\u00f3n_SELECT<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3ebf6b7 elementor-widget elementor-widget-text-editor\" data-id=\"3ebf6b7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>&#8211; Abrir el cursor:<\/p><p><span style=\"font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: 1rem; font-weight: var( --e-global-typography-text-font-weight );\">La apertura del cursor a trav\u00e9s de la cl\u00e1usula <\/span><span style=\"font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: 1rem;\"><b>OPEN<\/b><\/span><span style=\"font-family: var( --e-global-typography-text-font-family ), Sans-serif; font-size: 1rem; font-weight: var( --e-global-typography-text-font-weight );\"> har\u00e1 que se ejecute y se guarde la consulta temporal en nuestro servidor. La sintaxis para abrir el cursor es como sigue:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4c1990d elementor-widget elementor-widget-code-highlight\" data-id=\"4c1990d\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-sql line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-sql\">\n\t\t\t\t\t<xmp> OPEN nombre_cursor;\r\n   \r\n   OPEN nombre_cursor(valor1, valor2, ..., valorN)<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5936bbd elementor-widget elementor-widget-text-editor\" data-id=\"5936bbd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>&#8211; Recuperar las filas de la consulta:<\/p><p>La recuperaci\u00f3n de las filas ocurre de manera individual, es decir, cada recuperaci\u00f3n del cursor acceder\u00e1 a una \u00fanica fila. Una vez abierto el cursor, ir\u00e1 devolviendo las diferentes filas consultadas empezando desde el primer registro (por ello debemos crear un bucle LOOP que recupere todas autom\u00e1ticamente).\u00a0<\/p><p>La sintaxis de recuperaci\u00f3n va acompa\u00f1ada de la sentencia <b>FETCH<\/b>, la cual coloca el cursor en la siguiente fila de la tabla temporal y asigna los valores a las variables de destino:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e028a3a elementor-widget elementor-widget-code-highlight\" data-id=\"e028a3a\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-sql line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-sql\">\n\t\t\t\t\t<xmp>FETCH nombre_cursor INTO variables;<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-b7b98a1 elementor-widget elementor-widget-text-editor\" data-id=\"b7b98a1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Y con bucle:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e7f46ae elementor-widget elementor-widget-code-highlight\" data-id=\"e7f46ae\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-sql line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-sql\">\n\t\t\t\t\t<xmp>OPEN nombre_cursor;\r\nLOOP\r\n  FETCH nombre_cursor INTO variables;\r\n  EXIT WHEN nombre_cursor%NOTFOUND;\r\nEND LOOP;<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-86cc5ad elementor-widget elementor-widget-text-editor\" data-id=\"86cc5ad\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Dicha sentencia nos permitir\u00e1 recuperar filas hasta que ya no queden registros que recuperar a trav\u00e9s de la condici\u00f3n \u2018<b>WHEN<\/b> \u2026 y el atributo <b>%NOTFOUND<\/b>\u2019, la cual simplemente para el loop cuando no encuentra m\u00e1s datos que a\u00f1adir.\u00a0<\/p><p>Otro ejemplo es con la condici\u00f3n \u2018<b>WHILE \u2026 %FOUND<\/b>\u2019, que nos devolver\u00e1 resultado \u201cmientras encuentre\u201d datos datos disponibles:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-35eef35 elementor-widget elementor-widget-code-highlight\" data-id=\"35eef35\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-sql line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-sql\">\n\t\t\t\t\t<xmp>OPEN nombre_cursor;\r\nFETCH nombre_cursor INTO lista_variables;\r\nWHILE nombre_cursor%FOUND\r\nLOOP\r\n  FETCH nombre_cursor INTO lista_variables;\r\nEND LOOP;<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dfb117a elementor-widget elementor-widget-text-editor\" data-id=\"dfb117a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Tambi\u00e9n podemos usar un bucle FOR, lo cual constituye la manera m\u00e1s simple:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bee39fd elementor-widget elementor-widget-code-highlight\" data-id=\"bee39fd\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t\t\t\t<div class=\"prismjs-twilight copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-sql line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-sql\">\n\t\t\t\t\t<xmp>FOR variable IN nombre_cursor LOOP\r\nEND LOOP;<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e2e783e elementor-widget elementor-widget-text-editor\" data-id=\"e2e783e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>Sin embargo dada las caracter\u00edsticas de la sentencia, como habr\u00e1s adivinado si has estado atent@, este tipo de cursor entra dentro de la categor\u00eda de los impl\u00edcitos, ya que no se declara el cursor per s\u00e9 y se ejecutan las instrucciones OPEN, FETCH y CLOSE de manera impl\u00edcita.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-70e65a9 elementor-widget elementor-widget-text-editor\" data-id=\"70e65a9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><b>ATRIBUTOS DE LOS CURSORES<\/b><\/p><p>El cursor nos permitir\u00e1 <b>comprobar el resultado de la lectura en base al atributo que le asignemos<\/b>, antes vimos %NOTFOUND y %FOUND, ampliemos un poco m\u00e1s esto:<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8569902 elementor-widget elementor-widget-text-editor\" data-id=\"8569902\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><b>%FOUND:<\/b> nos devolver\u00e1 TRUE si la \u00faltima fila que procesa el cursor <b>contiene datos<\/b>. Tambi\u00e9n nos devolver\u00e1 TRUE si al hacer INSERT, DELETE o UPDATE estos afectan a alguna fila.\u00a0<\/p><p>\u00a0<\/p><p><b>%NOTFOUND: <\/b>nos devolver\u00e1 TRUE si la \u00faltima fila que procesa el cursor <b>no contiene ning\u00fan dato<\/b>. Tambi\u00e9n nos devolver\u00e1 TRUE si al hacer INSERT, DELETE o UPDATE estos no afectan a ninguna fila.<\/p><p>\u00a0<\/p><p><b>%ROWCOUNT:<\/b> Devolver\u00e1 el n\u00famero de <b>filas afectadas por los comandos DML<\/b> o bien las filas <b>devueltas<\/b> por la sentencia SELECT.<\/p><p>\u00a0<\/p><p><b>%ISOPEN:<\/b> Para los cursores impl\u00edcitos siempre devolver\u00e1 FALSE, ya que Oracle los cierra autom\u00e1ticamente al ejecutar el SELECT, sin embargo puede resultar de utilidad para saber si hemos cerrado correctamente un cursor expl\u00edcito.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ea67c8d elementor-widget elementor-widget-text-editor\" data-id=\"ea67c8d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>En conclusi\u00f3n, siempre y cuando no estemos hablando de consultas de millones de entradas, donde la eficiencia se puede ver muy comprometida por el propio funcionamiento iterativo del lenguaje PL\/SQL, un cursor es una buena idea si queremos <b>actualizar, borrar, etc., m\u00faltiples registros de una tabla<\/b>. Adem\u00e1s es una buena manera de obtener una <b>consulta de m\u00faltiples registros<\/b> de una tabla manera r\u00e1pida y sencilla.\u00a0\u00a0<\/p><p>Sin embargo, es muy importante <b>si se abre un cursor, cerrarlo<\/b>, pues como una vez le\u00ed en el maravilloso StackOverFlow \u201cUn cursor abierto es como mantener abierta la puerta de la nevera, no debes hacerlo durante horas si no es necesario, pero eso no quiere decir que no debas abrirla nunca\u201d.<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-df63dbc elementor-widget elementor-widget-heading\" data-id=\"df63dbc\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Fuentes<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3e44695 elementor-widget elementor-widget-text-editor\" data-id=\"3e44695\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p><a href=\"http:\/\/mioracle.blogspot.com\/2008\/07\/cursores-explicitos-en-plsql.html\" target=\"_blank\" rel=\"noopener\">http:\/\/mioracle.blogspot.com\/2008\/07\/cursores-explicitos-en-plsql.html<\/a><\/p><p><a href=\"https:\/\/codigolite.com\/cursores-implicitos-vs-explicitos\/\" target=\"_blank\" rel=\"noopener\">https:\/\/codigolite.com\/cursores-implicitos-vs-explicitos\/<\/a><\/p><p><a href=\"https:\/\/www.plsql.biz\/2006\/12\/cursores-en-plsql.html\" target=\"_blank\" rel=\"noopener\">https:\/\/www.plsql.biz\/2006\/12\/cursores-en-plsql.html<\/a><\/p><p><a href=\"https:\/\/elbauldelprogramador.com\/plsql-cursores\/\" target=\"_blank\" rel=\"noopener\">https:\/\/elbauldelprogramador.com\/plsql-cursores\/<\/a><\/p><p><a href=\"http:\/\/www.juntadeandalucia.es\/servicios\/madeja\/contenido\/recurso\/107\" target=\"_blank\" rel=\"noopener\">http:\/\/www.juntadeandalucia.es\/servicios\/madeja\/contenido\/recurso\/107<\/a><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-614b2ec9 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"614b2ec9\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-divider\">\n\t\t\t<span class=\"elementor-divider-separator\">\n\t\t\t\t\t\t<\/span>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c77df54 elementor-align-center elementor-widget elementor-widget-button\" data-id=\"c77df54\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/bestdatasolutions.es\/en\/blog\/\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">&lt;&lt; BACK TO BLOG<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Other Articles: Compartir en linkedin LinkedIn Compartir en facebook Facebook Compartir en twitter Twitter Compartir en whatsapp WhatsApp Today we will talk about Dataflows, the new Power BI tool for ETL that allows you to work with large volumes of data and then be able to visualize them.&nbsp; Don&#8217;t miss the video where we explain [&hellip;]<\/p>\n","protected":false},"author":12,"featured_media":6174,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[49],"tags":[74],"class_list":["post-6162","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-general"],"_links":{"self":[{"href":"https:\/\/bestdatasolutions.es\/en\/wp-json\/wp\/v2\/posts\/6162","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bestdatasolutions.es\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bestdatasolutions.es\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bestdatasolutions.es\/en\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/bestdatasolutions.es\/en\/wp-json\/wp\/v2\/comments?post=6162"}],"version-history":[{"count":0,"href":"https:\/\/bestdatasolutions.es\/en\/wp-json\/wp\/v2\/posts\/6162\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bestdatasolutions.es\/en\/wp-json\/wp\/v2\/media\/6174"}],"wp:attachment":[{"href":"https:\/\/bestdatasolutions.es\/en\/wp-json\/wp\/v2\/media?parent=6162"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bestdatasolutions.es\/en\/wp-json\/wp\/v2\/categories?post=6162"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bestdatasolutions.es\/en\/wp-json\/wp\/v2\/tags?post=6162"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}