Ejemplo de: CREATE TABLE, DROP TABLE IF EXIST, INSERT, TRUNCATE TABLE.
require 'rubygems'
require 'pg'
dropear_tabla = "drop table if exists jugadores;"
crear_tabla = "create table jugadores (
id integer,
nombre varchar(40),
apellidos varchar(40),
nick char(15),
fnacimiento date);"
insertar_1 = "insert into jugadores values (1000001, 'angel amadeo', 'labruna', 'el feo', '28-11-1918');"
truncar_tabla = "truncate table jugadores;"
# string de coneccion
conn = PGconn.connect("127.0.0.1", 5432, '', '', "template1", "postgres", "pwdxyz")
# Elimino la tabla si existe.
res = conn.exec(dropear_tabla)
# Creo la tabla
res = conn.exec(crear_tabla)
# Agrego un registro
res = conn.exec(insertar_1)
# Elimino todos los registros de la tabla
res = conn.exec(truncar_tabla)
require 'rubygems'
require 'pg'
def mostrarMensajes(mensaje, resultado)
print "\n", mensaje, "\n"
print "cmd_status: #{resultado.cmd_status}\n"
print "cmdtuples: #{resultado.cmdtuples}\n"
print "num_fields: #{resultado.num_fields}\n"
print "num_tuples: #{resultado.num_tuples}\n"
end
conn = PGconn.connect("127.0.0.1", 5432, '', '', "template1", "postgres", "pwdxyz")
#ejecuto el comando truncate para limpiar la tabla
res = conn.exec("truncate table jugadores;")
mostrarMensajes("Truncate table", res)
#escribo el insert completo
res = conn.exec("insert into jugadores values (1000001, 'ángel amadeo', 'labruna', 'el feo', '28-11-1918');")
mostrarMensajes("Insert completo:", res)
#uso una variable para hacer el insert
ins = "insert into jugadores values (1000002, 'bernabé', 'ferreyra', 'la fiera', '12-02-1908');"
res = conn.exec(ins)
mostrarMensajes("Insert con variable:", res)
#uso una variable para hacer el insert, la variable tiene reemplazos al estilo ruby
id = 1000003
nombre = 'juan gilberto'
apellido = "funes"
nick = "el bufalo"
fnac = '08-03-1963'
ins = "insert into jugadores (id, nombre, apellidos, nick, fnacimiento) values (#{id}, '#{nombre}', '#{apellido}', '#{nick}', '#{fnac}');"
res = conn.exec(ins)
mostrarMensajes("Insert con variable y reemplazos:",res)
#una variable con varios insert
ins = "insert into jugadores values (1000004, 'enzo', 'francescoli', 'el principe', '12-11-1961');
insert into jugadores values (1000005, 'josé manuel', 'moreno', 'el charro', '03-08-1916');"
res = conn.exec(ins)
mostrarMensajes("Varios insert en una variable: ", res)
#uso un array para hacer los insert
vector = []
vector.push("insert into jugadores values (1000006, 'ubaldo matildo', 'fillol', 'el pato', '21-06-1950');")
vector.push("insert into jugadores values (1000007, 'radamel', 'falcao garcía', 'el tigre', '12-02-1986');")
vector.push("insert into jugadores values (1000008, 'juan pablo', 'angel', 'angelito', '24-10-1975');")
vector.push("insert into jugadores values (1000009, 'norberto osvaldo', 'alonso', 'el beto', '04-01-1956');")
vector.push("insert into jugadores values (1000010, 'ramón ángel', 'díaz', 'pelado', '29-08-1959');")
vector.push("insert into jugadores values (1000011, 'walter', 'gomez', null, '12-12-1927');")
vector.each do |ins|
res = conn.exec(ins)
mostrarMensajes("Dentro del loop, insertando con arrays", res)
end
conn.close() if conn
require 'rubygems'
require 'pg'
def mostrarMensajes(mensaje, resultado)
print "\n", mensaje, "\n"
print "cmd_status: #{resultado.cmd_status}\n"
print "cmdtuples: #{resultado.cmdtuples}\n"
print "num_fields: #{resultado.num_fields}\n"
print "num_tuples: #{resultado.num_tuples}\n"
end
conn = PGconn.connect("127.0.0.1", 5432, '', '', "template1", "postgres", "pwdxyz")
# incio la transaccion
res = conn.exec("begin;")
# inserto un registro
res = conn.exec("insert into jugadores values (10001000, 'ángel clemente', 'rojas', 'rojitas', '28-08-1944');")
# muestro el registro insertado
res = conn.exec("select * from jugadores where id=10001000;")
if res.num_tuples > 0
print "id: #{res[0]['id']} \n"
print "Nombres: #{res[0]['nombre']} \n"
print "Apellidos: #{res[0]['apellidos']} \n"
print "Apodo: #{res[0]['nick']} \n"
print "Fecha de N.: #{res[0]['fnacimiento']} \n"
end
#deshago el insert.
res = conn.exec("rollback;")
#busco el registro que antes se insertó y mostró
res = conn.exec("select * from jugadores where id=10001000;")
if res.num_tuples > 0
print "id: #{res[0]['id']}\n"
print "Nombres: #{res[0]['nombre']}\n"
print "Apellidos: #{res[0]['apellidos']}\n"
print "Apodo: #{res[0]['apellidos']}\n"
print "Fecha de N.: #{res[0]['fnacimiento']}\n"
else
print "¡Rojitas no está!\n"
end
#transaccion en una sola linea.
confirmar = 'commit;'
confirmar = 'rollback;'
apodo = 'rojitas'
ins = "begin;
insert into jugadores values (10001000, 'ángel clemente', 'rojas', '#{apodo}', '28-04-1944');
#{confirmar};"
res = conn.exec(ins)
conn.close() if conn
require 'rubygems'
require 'pg'
conn = PGconn.connect("127.0.0.1", 5432, '', '', "template1", "postgres", "pwdxyz")
res = conn.exec("select id, COALESCE(nick, rpad('No tiene',15,'-')) as nvl, apellidos, nombre, fnacimiento from jugadores order by apellidos;")
res.each do |registro|
print registro['id'], ", ", registro['nvl'], ", ",
registro['apellidos'], "; ", registro['nombre'], ", ", registro['fnacimiento'], "\n"
end
conn.close() if conn
Quizás alguien se pregunte cual es el motivo para usar un cursor…, bueno la respuesta es que se deben usar cursores cuando hay muchos registros a procesar. Yo los he usado en múltiples oportunidades cuando trabajaba en una telefónica y con tablas que contenían tráfico (llamadas telefónicas)
#! /usr/bin/env ruby
#
# original file src/test/examples/testlibpq.c
#
require 'rubygems'
require 'pg'
def main
conn = PGconn.connect("127.0.0.1", 5432, '', '', "template1", "postgres", "pwdxyz")
if $DEBUG
#
# para usar esta opcion se debe ejecutar de la siguiente forma
# ruby -d test_cursor2.rb
#
fd = open("./trace.out","w")
conn.trace(fd)
end
res = conn.exec("BEGIN")
res.clear
res = conn.exec("DECLARE myportal CURSOR FOR select nombre, apellidos, fnacimiento from jugadores order by fnacimiento;")
res.clear
res = conn.exec("FETCH 2 in myportal")
while res.num_tuples > 0 do
res.each do |tupl|
print tupl['fnacimiento'], ", ",tupl['apellidos'], ", ", ['nombre'], "\n"
end
res = conn.exec("FETCH 2 in myportal")
end
res = conn.exec("CLOSE myportal")
res = conn.exec("END")
res.clear
conn.close
if $DEBUG
fd.close
end
end
main