Create or replace function b

Solo disponible en BuenasTareas
  • Páginas : 5 (1138 palabras )
  • Descarga(s) : 12
  • Publicado : 23 de julio de 2010
Leer documento completo
Vista previa del texto
CREATE OR REPLACE FUNCTION b_est(int4)
RETURNS "varchar" AS
$BODY$declare
datosest estudiante%ROWTYPE;

BEGIN

SELECT INTO datosest * FROM estudiante
WHERE ci=$1;

IF NOT FOUND THEN
RETURN 0;
END IF;

RETURN datosest;
end;$BODY$
LANGUAGE 'plpgsql' VOLATILE;
-------------------------------------------------

estoy trabajando con postgresql y necesito hacer unaconsulta sql un poco complicada y nose como hacer.
Tengo dos tablas: reg_personal (id, nombre, dni, nacionalidad ) y otra tabla reg_fechas (id, fecha)

Quisiera hacer una secuencia sql para postgresql que me devuelva todos los registros de la tabla reg_personal que coincidad con los registro de la tabla reg_fechas, es decir que los id de ambas tablas coicidan pero que a su vez, me busque todos losregistro en funcion de un rango de fechas.

Por separado es algo asi:

para buscar por rangos de fechas:
select * from reg_fechas where cast(fecha as date) between '2010-01-01' and '2010-04-01';

De esta secuencia yo sacaria todos los id segun un rango de fechas.

Como hago para buscar todos los registros de la tabla reg_personal cuyo id coicida con los id encontrados anterior, pero de unasola vez.

Por ejemplo esta consulta solo me devuelve cuatro veces el ultimo registro que encuentra en reg_fechas:

SELECT * FROM reg_fechas LEFT OUTER JOIN reg_personal ON (id = (select id from reg_fechas where cast(fecha as date) between '2010-01-01' and '2010-04-01'));
Como hago para que me devuelva todos los registros coicidentes?...tengo qe hacer si o si dos consutlas o se puede hacer enuna sola secuencia sql?

CREATE TABLE reg_personal
( ID serial not null,
FCHL timestamp,
NOMBRE varchar(30) not null,
DNI varchar(15) not null
Primary key (ID, FCHL)) without oids;

CREATE TABLE reg_fechas
( ID smallint,
FCHL TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
primary key (ID, FCHL)) without oids;
Para reg_personal: El campo id es autoincremental, a medida que se vanregistrando los usuarios se les asigna un id. Y el campo fchl, no tiene nada que ver con el fchl del reg_fechas, es solo para saber cuando se registro.
pruebas=> SELECT *FROM reg_personal;
id | nombre | dni
----+-----------+---------
7 | 131351165 | pepe
10 | 6486466 | juancho
8 | 1648468 | lulu
3 | 154166 | jasinta
(4 filas)

pruebas=> SELECT *FROM reg_fechas;id | fchl
----+-------------------------
7 | 2010-03-09 09:39:08.625
10 | 2010-03-09 09:41:27.64
8 | 2010-03-09 09:41:34.281
3 | 2010-03-09 09:41:37.078
(4 filas)

pruebas=> SELECT
pruebas-> rp.id,
pruebas-> rp.nombre,
pruebas-> rp.dni,
pruebas-> rf.fchl
pruebas-> FROM
pruebas-> reg_personal AS rp
pruebas-> INNER JOIN
pruebas-> reg_fechasAS rf
pruebas-> ON
pruebas-> rp.id = rf.id
pruebas-> WHERE
pruebas-> rf.fchl::date
pruebas-> BETWEEN '2010-01-01'
pruebas-> AND '2010-04-01';
id | nombre | dni | fchl
----+-----------+---------+-------------------------
3 | 154166 | jasinta | 2010-03-09 09:41:37.078
7 | 131351165 | pepe | 2010-03-09 09:39:08.625
8 | 1648468 | lulu |2010-03-09 09:41:34.281
10 | 6486466 | juancho | 2010-03-09 09:41:27.64
-------------------------------------------------
(4 filas)
<html>
<title>BTR</title>
<body bgcolor="EEFFEE">
<center>
<h3>
<?php
$nombre=$_POST[nombre];
echo "RELACION DE PERSONAS LLAMADAS $nombre";
?>
</h3>
<P>
</CENTER>
<?php$link=mysql_connect('localhost','root','password');
if (!$link){
echo "No se ha podido conectar a la base de datos";
exit();
}
$nombre=$_POST[nombre];
mysql_select_db("mydb");
$consulta=mysql_query("select LE, APE_PAT, APE_MAT, NOMBRE, FEC_NAC from tabla where NOMBRE='$nombre'");
while($row=mysql_fetch_array($consulta)){
echo "$row[0], $row[APE_PAT], $row[APE_MAT], $row[NOMBRE],...
tracking img