jueves, 12 de julio de 2012

Cargar o actualizar datos desde un archivo CSV a un tabla de un Base de datos Oracle utilizando APEX

Hola a tod@s!

Espero se encuentren muy bien. Hoy quiero compartir con ustedes algo que he aprendido y es ¿Cómo cargar o subir datos desde un archivo CSV a un tabla de un Base de datos Oracle utilizando APEX ?



Paso 1: Crear una nueva página con los siguientes objetos

1.1 Un región que sea un reporte iteractivo, sobre la tabla en la que vas a cargar/actualizar los datos (Opcional). Esto se servira para ir llevando un control de lo que vas insertando o actualizando
1.2 Un botón que servirá realizar el submit para cargar los datos
1.3 Un item tipo File Browse, en mi caso tiene el nombre P1_FILE

Paso 2: Crear una validación sobre el item para que se ejecute cada vez que hagas clic sobre el botón cargar. La validación es la de que este item no sea nulo, es decir que siempre se escoja el archivo que se va a cargar antes de hacer clic en el botón.
   En apex la validación es de tipo: Item specified is NOT NULL

Paso 3: Crear un proceso, con las siguientes características:
* Type: PL/SQL anonymous block    Conditional
* Process Point: On Submit - Before Computations and Validations (Esto es para que se ejecute despues de que se realice un submit que en nuestro caso cuando hagamos clic en el botón y si cumple las validaciones que creamos)
* Source: (Esta es la query que sirve solo para insertar registros)

DECLARE
 v_blob_data       BLOB;
 v_blob_len        NUMBER;
 v_position        NUMBER;
 v_raw_chunk       RAW(10000);
 v_char      CHAR(1);
 c_chunk_len   number       := 1;
 v_line        VARCHAR2 (32767)        := NULL;
 v_data_array      wwv_flow_global.vc_arr2;
 v_rows number;
 v_sr_no number := 1;

BEGIN

--Borran datos anteriores
delete from nombre_tabla;

-- Read data from wwv_flow_files
 select blob_content into v_blob_data
 from wwv_flow_files
 where name = :P1_FILE; --AQUI DEBEN CAMBIAR EL NOMBRE POR EL ITEM QUE USTEDES CREEN

v_blob_len := dbms_lob.getlength(v_blob_data);
 v_position := 1;

-- Read and convert binary to char
 WHILE ( v_position <= v_blob_len ) LOOP
 v_raw_chunk := dbms_lob.substr(v_blob_data,c_chunk_len,v_position);
 v_char :=  chr(hex_to_decimal(rawtohex(v_raw_chunk)));
 v_line := v_line || v_char;
 v_position := v_position + c_chunk_len;
 -- When a whole line is retrieved
 IF v_char = CHR(10) THEN
 -- Convert comma to : to use wwv_flow_utilities
 v_line := REPLACE (v_line, ';', ':'); --AQUI POR FAVOR TENGA EN CUENTA CUAL ES EL SEPARADOR QUE UTILIZAN COMA, PUNTO Y COMA.
-- Convert each column separated by : into array of data
 v_data_array := wwv_flow_utilities.string_to_table (v_line);
 -- Insert data into target table
 EXECUTE IMMEDIATE 'INSERT INTO nombre_tabla (campo1
                                      ,campo2
                                      ,campo3
                                      ,campo4
                                      ,campo5
                                      ,campo6
                                      ,campo7
                                      ,campo8
                                      ,campo9
                                      ,campo10
                                      ,campo11
                                      ,campo12
                                      ,campo13)
VALUES (:1,
        :2,
        :3,
        :4,
        :5,
        :6,
        :7,
        :8,
        :9,
        :10,
        :11,
        :12,
        :13)'
 USING
 to_number(v_data_array(1)),
 v_data_array(2),
 v_data_array(3),
 v_data_array(4),
 v_data_array(5),
 v_data_array(6),
 v_data_array(7),
 v_data_array(8),
 v_data_array(9),
 v_data_array(10),
 v_data_array(11),
 to_number(v_data_array(12)),
 v_data_array(13);
 -- Clear out
 v_line := NULL;
 END IF;

END LOOP;
 END;



* Source: (Esta es la query que sirve solo para insertar y actualizar registros)

 
DECLARE
 v_blob_data       BLOB;
 v_blob_len        NUMBER;
 v_position        NUMBER;
 v_raw_chunk       RAW(10000);
 v_char      CHAR(1);
 c_chunk_len   number       := 1;
 v_line        VARCHAR2 (32767)        := NULL;
 v_data_array      wwv_flow_global.vc_arr2;
 v_rows number;
 v_sr_no number := 1;

BEGIN

-- Read data from wwv_flow_files
 select blob_content into v_blob_data
 from wwv_flow_files
 where name = :P1_FILE;

v_blob_len := dbms_lob.getlength(v_blob_data);
 v_position := 1;

-- Read and convert binary to char
 WHILE ( v_position <= v_blob_len ) LOOP
 v_raw_chunk := dbms_lob.substr(v_blob_data,c_chunk_len,v_position);
 v_char :=  chr(hex_to_decimal(rawtohex(v_raw_chunk)));
 v_line := v_line || v_char;
 v_position := v_position + c_chunk_len;
 -- When a whole line is retrieved
 IF v_char = CHR(10) THEN
 -- Convert comma to : to use wwv_flow_utilities
 v_line := REPLACE (v_line, ';', ':');
-- Convert each column separated by : into array of data
 v_data_array := wwv_flow_utilities.string_to_table (v_line);
 -- Insert data into target table
 EXECUTE IMMEDIATE 'MERGE INTO nombre_tabla A USING
 (SELECT
        :1 as "campo1",
        :2 as "campo2",
        :3 as "campo3",
        :4 as "campo4",
        :5 as "campo5",
        :6 as "campo6",
        :7 as "campo7",
        :8 as "campo8",
        :9 as "campo9",
        :10 as "campo10"
  FROM DUAL) B
ON (A.campo1 = B.campo1)
WHEN NOT MATCHED THEN
INSERT (
  campo0, campo1, campo2, campo3, campo4, campo5,
  campo6, campo7, campo8, campo9, campo10)
VALUES (
  secuencia_tabla.nextval, TRIM(B.campo1), TRIM(B.campo2), TRIM(B.campo3), TRIM(B.campo4), TRIM(B.campo5), TRIM(UPPER(B.campo6)),
TRIM(B.campo7), TRIM(B.campo8), TRIM(B.campo9), TRIM(B.campo10))
WHEN MATCHED THEN
UPDATE SET
  A.campo2 = TRIM(B.campo2),
  A.campo3 = TRIM(B.campo3),
  A.campo4 = TRIM(B.campo4),
  A.campo5 = TRIM(B.campo5),
  A.campo6 = TRIM(UPPER(B.campo6)),
  A.campo7 = TRIM(B.campo7),
  A.campo8 = TRIM(B.campo8),
  A.campo9 = TRIM(B.campo9),
  A.campo10 = TRIM(B.campo10)'
 USING
-- to_number(v_data_array(1)),
 v_data_array(1),
 v_data_array(2),
 v_data_array(3),
 v_data_array(4),
 v_data_array(5),
 v_data_array(6),
 v_data_array(7),
 v_data_array(8),
 v_data_array(9),
 v_data_array(10);
 -- Clear out
 v_line := NULL;
 END IF;

END LOOP;

EXCEPTION
 
WHEN OTHERS THEN
    
   apex_application.g_print_success_message := '  Error:  ->> ' || sqlerrm || '  Error2:   ---> ' || DBMS_UTILITY.format_error_backtrace;

 END;


Eso es todo, si quieren personalizar o separar la region de carga de datos del reporte, pueden crear una nueva región, ahi ya es cuestión de como desean personalizar su aplicación.

Les agrego una imagen de como tienen que quedar los pasos:

Cualquier inquietud me comentan, espero poder ayudarles.



El link de donde yo aprendí es: OraExplorer, APEX to upload a text file and write into a table



14 comentarios:

Anónimo dijo...

[url=http://loveepicentre.com][img]http://loveepicentre.com/uploades/photos/4.jpg[/img][/url]
online dating novels [url=http://loveepicentre.com/]teen age dating tips[/url] dating for agnostics
scientific dating [url=http://loveepicentre.com/]woman dating short man tips[/url] bad breath biggest dating characteristic
beverly ma dating [url=http://loveepicentre.com/]male 60 mission viejo ca dating[/url] hot young thai women for dating

Anónimo dijo...

[url=http://loveepicentre.com/testimonials.php][img]http://loveepicentre.com/uploades/photos/11.jpg[/img][/url]
sex dating in sauk village illinois [url=http://loveepicentre.com/]dallas green dating[/url] single professional dating
cosmo dating [url=http://loveepicentre.com]gay teen dating in mn[/url] space single dating
online dating competitors [url=http://loveepicentre.com/map.php]armenian single dating site[/url] dating the rem 760 gamemaster

Anónimo dijo...

top ten latest dating site http://loveepicentre.com/ dating daddy

Anónimo dijo...

psychology ebook ciccarelli http://audiobooksworld.co.uk/authors/?letter=P. richard maybury ebook [url=http://audiobooksworld.co.uk/de/R-B-Warfield-Jr/m102624/]ebook library canada[/url] tom corbett space cadet ebook
[url=http://audiobooksworld.co.uk/it/Mind-Is-a-Myth/p224762/][img]http://audiobooksworld.co.uk/image/1.gif[/img][/url]

Anónimo dijo...

blackberry 8110 software free http://buyoem.co.uk/fr/information-7/FAQ#faq2 mechanical contractor software [url=http://buyoem.co.uk/product-14870/SpaceObServer-3-0]palm meeting minutes software[/url] windows xp pro software sp2
[url=http://buyoem.co.uk/product-14813/PopChar-Mac]PopChar [Mac] - Cheap Legal OEM Software, Software Sale, Download OEM[/url] drop box software
[url=http://buyoem.co.uk/es/product-37214/Mixpad-Audio-Mixer-1-1][img]http://buyoem.co.uk/image/3.gif[/img][/url]

Anónimo dijo...

dvd player software windows2000 http://buyoem.co.uk/it/product-37199/Magic-Music-Workshop-8-0 system security software how to remove [url=http://buyoem.co.uk/product-34547/Microsoft-Visual-Studio-2010-Ultimate-x32]partition recovery software[/url] computer software mail order retail
[url=http://buyoem.co.uk/search]Search - Software Store[/url] gps travel map software
[url=http://buyoem.co.uk/es/category-100-114/Otros?page=2][img]http://buyoem.co.uk/image/5.gif[/img][/url]

Anónimo dijo...

geometric tolerancing symbols software http://buyoemsoftware.co.uk/it/product-36918/VLSoftware-Exportizer-Pro-5-0-Bilingual accord software system [url=http://buyoemsoftware.co.uk/it/category-8/Herramientas-de-la-Oficina?page=4]medical software program[/url] best disk cloning software
[url=http://buyoemsoftware.co.uk/product-37225/Notepad-Pro-3-2]Notepad Pro 3.2 - Software Store[/url] best software for ubuntu
[url=http://buyoemsoftware.co.uk/es/news-31/Google-s-new-app-strategy-Mobile-comes-first][img]http://buyoem.co.uk/image/2.gif[/img][/url]

Anónimo dijo...

optical mark recognition software flatbed scanner http://buyoemsoftware.co.uk/fr/product-31620/Super-Flexible-File-Synchronizer-4-8-MAC media doctor software [url=http://buyoemsoftware.co.uk/de/product-35356/3herosoft-DVD-to-FLV-Converter-3-5-MacOSX]open source software lms[/url] billing software creat invoices database
[url=http://buyoemsoftware.co.uk/product-36960/FileMaker-Pro-Advanced-11-0]FileMaker Pro Advanced 11.0 - Download OEM, Software Sale, OEM Software[/url] grant proposal writing software
[url=http://buyoemsoftware.co.uk/product-18302/Bookdog-Mac][img]http://buyoem.co.uk/image/2.gif[/img][/url]

Anónimo dijo...

adobe software uk http://buysoftwareonline.co.uk/de/product-35368/3herosoft-iPhone-Photo-to-Computer-Transfer-3-8-MacOSX workflows software [url=http://buysoftwareonline.co.uk/product-37035/Pika-Icon-To-Bitmap-Converter-2-0]adobe acrobat professional 6.0 software gratuito[/url] blu-ray label software
[url=http://buysoftwareonline.co.uk/product-36898/Spacehead-Systems-MixUp-2-0]Spacehead Systems MixUp 2.0 - Download OEM, Software Sale, OEM Software[/url] glass barcoding opti software
[url=http://buysoftwareonline.co.uk/fr/product-37222/Nicos-Commander-5-6][img]http://buyoem.co.uk/image/1.gif[/img][/url]

Anónimo dijo...

technical drawing software http://buysoftwareonline.co.uk/product-35105/WhoCrashed-Professional-3-0 bluetooth explorer software free [url=http://buysoftwareonline.co.uk/product-36430/Benthic-Software-PLEdit-6-0]adobe photoshop lightroom image editing software[/url] genuine fractals software altamura
[url=http://buysoftwareonline.co.uk/product-37352/Ultra-Video-Splitter-5-0]Ultra Video Splitter 5.0 - Software Store[/url] blackberry desktop software for curve 8310
[url=http://buysoftwareonline.co.uk/fr/product-16444/BitClamp-Mac][img]http://buyoem.co.uk/image/3.gif[/img][/url]

Anónimo dijo...

pace real estate investment software http://buysoftwareonline.co.uk/fr/product-37101/Alabe-Reports-Asteroid-Goddesses-1-2 bpm detector similar software [url=http://buysoftwareonline.co.uk/fr/product-33402/Adobe-Fireworks-CS5-MAC]tax software for truck drivers[/url] setup software for palmone zire 72
[url=http://buysoftwareonline.co.uk/product-36467/Active-To-Do-List-3-0]Active To-Do List 3.0 - Software Store[/url] medical meeting event planning software
[url=http://buysoftwareonline.co.uk/fr/product-19644/PlexityHide-GTP-NET-3-2][img]http://buyoem.co.uk/image/5.gif[/img][/url]

Anónimo dijo...

[url=http://certifiedpharmacy.co.uk/products/levothroid.htm][img]http://onlinemedistore.com/3.jpg[/img][/url]
find a good pharmacy http://certifiedpharmacy.co.uk/products/zestril.htm signature pharmacy internal revenue service [url=http://certifiedpharmacy.co.uk/products/uroxatral.htm]rie aid pharmacy[/url]
cvs pharmacy picture http://certifiedpharmacy.co.uk/products/aricept.htm clinical pharmacy software [url=http://certifiedpharmacy.co.uk/products/aldactone.htm]aldactone[/url]
middletown pharmacy http://certifiedpharmacy.co.uk/products/erectalis.htm elderly health care pharmacy [url=http://certifiedpharmacy.co.uk/products/singulair.htm]discount internet pharmacy[/url]
pharmacy somatropin prices http://certifiedpharmacy.co.uk/products/celexa.htm bm pharmacy [url=http://certifiedpharmacy.co.uk/products/bactroban.htm]bactroban[/url]

Anónimo dijo...

[url=http://certifiedpharmacy.co.uk/products/revia.htm][img]http://onlinemedistore.com/8.jpg[/img][/url]
wv board of pharmacy http://certifiedpharmacy.co.uk/products/retin-a-0-02-.htm undergraducated pharmacy cbl [url=http://certifiedpharmacy.co.uk/products/generic-keflex.htm]online pharmacy com[/url]
pet pharmacy plus http://certifiedpharmacy.co.uk/products/tadacip.htm mexican pharmacys [url=http://certifiedpharmacy.co.uk/products/levothroid.htm]levothroid[/url]
college pharmacy compounding lab veterinarian http://certifiedpharmacy.co.uk/products/xenical.htm admissions officer for strathclyde uni pharmacy [url=http://certifiedpharmacy.co.uk/products/hyzaar.htm]indian pharmacy no prescription xanax[/url]
quality improvement and pharmacy http://certifiedpharmacy.co.uk/products/fincar.htm express script pharmacy toll free telephone [url=http://certifiedpharmacy.co.uk/products/alavert.htm]alavert[/url]

Anónimo dijo...

Hola, he seguido tus indicaciones pero me marca este error:

ORA-01403: No se ha encontrado ningún dato

tendras alguna idea de por que me sale esto,

Gracias

Sueños de Informáticos!!

A veces... bueno no... siempre me he preguntado porque elegimos algo, la carrera, tu pareja, tus amig@s, mentir o decir la verdad, bueno siempre elegiges... para que???ahora he comprendido que los sueños son los responsables... elegiges algo porque quieres algo, elegiges no engañar porque no quieres que hagan lo mismo contigo, eliges estar con alguien porque crees y sientes que vas a pasar bien junto a su lado, y bueno, eliges tu carrera para ser alguien... no verdad??? eliges porque tu sueño es el de crear, diseñar construir algo mejor, mas sofisticado... y por eso eres un informático porque analizas todo y sabes lo importante que es escalar paso a paso....

Sistemas 2009

Sistemas 2009
disfrutnado con mis amig@s en la cena de sistemas...