Archive for January, 2009


Sometimes I need to use data from a csv (comma separated values) in an oracle procedure. The best way to do that is inserting the data into a db table using sqlloader and then reading it from the PL/SQL.

In this post I will show you how to use sql loader to load a csv file exported from excel into an oracle table.

Suppose that you got a XLS spreadsheet with contact data: first name, last name, security number, phone number.

First, create a table where the file will be loaded:

CREATE TABLE people_from_csv
   (first_name varchar2(200)
   ,last_name varchar2(200)
   ,security_number number
   ,phone_number varchar2(50)
   );

In my xls (people.xls) I have the following info:

First Name Last Name Secutiry Number Phone Number
John Doe 00000001 11111123456
John 01 Doe 00000002 11111123457
John 02 Doe 00000003 11111123458
John 03 Doe 00000004 11111123459
John 04 Doe 00000005 11111123460
John 05 Doe 00000006 11111123461
John 06 Doe 00000007 11111123462

Save the data as a comma delimited file.

File -> Save As
Change File name to people_csv
Select ‘Text CSV ’ in the File type drop down box.

If you open the people_csv.csv file in a text editor (vi in my case), you will see it in a comma separated format. Two commas will denote fields without a value, these will be loaded as nulls into the Oracle table.

CSV file:

First Name,Last Name,Secutiry Number,Phone Number
John ,Doe,00000001,11111123456
John 01,Doe,00000002,11111123457
John 02,Doe,00000003,11111123458
John 03,Doe,00000004,11111123459
John 04,Doe,00000005,11111123460
John 05,Doe,00000006,11111123461
John 06,Doe,00000007,11111123462

Create the following sql loader control file (people_ctrl.txt)

LOAD DATA
INFILE ‘people_csv.csv’
INTO TABLE people_from_csv
FIELDS TERMINATED BY ‘,’
( first_name, last_name , security_number, phone_number)

at last  run the sql loader to put the info into the db table.

$ sqlldr usr/pwd control=people_ctrl.txt log=csvlog

SQL*Loader: Release 9.2.0.8.0 - Production on Tue Jan 13 17:26:53 2009

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Commit point reached - logical record count 7

Now I can use the data from sql with a simple query:

SQL> SELECT phone_number FROM people_from_csv;

PHONE_NUMBER
————————————————–
11111123456
11111123457
11111123458
11111123459
11111123460
11111123461
11111123462

7 rows selected.

curl es un programa que nos permite transferir datos (o archivos) desde o hasta un servidor, a través de distintos protocolos (entre ellos HTTP, FTP, SCP, etc).

hackers usando curl para testear un SQL injection.





hackers usando curl para testear un SQL injection

Lo interesante (y lo más usado entre los code-monkeys de Easytech) es su uso para emular POSTs a ciertas URLs, sin tener que pasar por la página en el browser.

si no lo tienen, pueden bajarlo del link anterior, aunque tiene fama de estar en todos los repos de las distros conocidas.

En mi caso particular, curl me fue muy útil para hacer un POST a una de las webapps que desarrollamos, y poder chequear el XML que devolvía, sin complicaciones ni pasar por un web-browser.

un PM de Easytech le enseña a un junior a probar sus Forms con curl.















un PM de Easytech le enseña a un junior a probar sus Forms con curl.

empecemos por lo más básico, emular un formulario. esto lo hacemos con curl -F, o curl -d (dependiendo del content-type que querramos usar). La sintáxis sería algo como:

curl -d "nombre_campo1=valor_campo1&nombre_campo2=valor_campo2&nombre_campoN=valor_campoN" url_a_donde_hacemos_el_post.com

Otro uso interesante es el de hacer upload de files, emulando un de un form html. La sintáxis:

curl -F "nombre_del_input=@path_al_file_a_subir" url_a_donde_hacemos_el_post.com

o…

curl -F "nombre_del_input=@path_al_file_a_subir;filename=nombre_del_file" url_a_donde_hacemos_el_post.com

… si queremos un nombre específico para el file.

Nótese que la arroba delante del path del file es obligatoria.

Claro que, lo que yo quería, era ver qué me devolvía la aplicación (en este caso es un upload de un file a un servidor que devolvía un XML con datos). Para hacer esto tenemos varias formas, u opciones, para pasarle al comando curl, como ser –verbose, –trace, o –trace-ascii. Cada una muestra distintas cosas, dependiendo lo que necesitemos. En mi caso, el servidor devolvía el XML con un simple fpassthru, para lo que trace-ascii venía perfecto.

La sintáxis, entonces, sería así:

curl –trace-ascii -F "nombre_del_input=@path_al_file_a_subir;filename=nombre_del_file" url_a_donde_hacemos_el_post.com

la aplicación recibió el file a uploadear como si de un form se tratase, y al devolver el XML, curl lo mostró por stdout. Ideal para debuggear desde la terminal en un servidor remoto o sin tener que pasar por la aplicación web.

Dicen por ahí que también es muy útil para testear vulnerabilidades en algunos sitios con poca validación de formularios, pero eso es demasiado oscuro para mí.

hacker sexy tipea un script con 2 joysticks.












hacker sexy tipea un script con 2 joysticks.

Para ver más ejemplos, consulten acá o en el man de curl, por supuesto.