Saludos
Cita:
Iniciado por mariovargascareaga tengo la sgte tabla...
tasas
serial character
cod_tasa|descrip
----------------
1 |porcentaje anual
2 |porcentaje mensual
3 |porcentaje trimestral
la funcion para ingresar un nuevo registro es la sgte:
CREATE OR REPLACE FUNCTION alt_tasa( des1 bpchar)
RETURNS void AS
$BODY$declare
begin
INSERT INTO tasas
(descrip)
VALUES
(des1);
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION alt_tasa( des1 bpchar) OWNER TO postgres;
Hasta aquí...
Código:
pruebas=# CREATE TABLE tasas (cod_tasa serial, descrip varchar(5));
NOTICE: CREATE TABLE creará una secuencia implícita «tasas_cod_tasa_seq» para la columna serial «tasas.cod_tasa»
CREATE TABLE
pruebas=# INSERT INTO tasas (descrip) VALUES ('anual');
INSERT 0 1
pruebas=# INSERT INTO tasas (descrip) VALUES ('mens');
INSERT 0 1
pruebas=# INSERT INTO tasas (descrip) VALUES ('semes');
INSERT 0 1
pruebas=# SELECT * FROM tasas;
cod_tasa | descrip
----------+-------------
1 | anual
2 | mens
3 | semes
(3 filas)
pruebas=# CREATE OR REPLACE FUNCTION alt_tasa( des1 bpchar)
pruebas-# RETURNS void AS
pruebas-# $BODY$declare
pruebas$# begin
pruebas$# INSERT INTO tasas
pruebas$# (descrip)
pruebas$# VALUES
pruebas$# (des1);
pruebas$# end;
pruebas$# $BODY$
pruebas-# LANGUAGE 'plpgsql' VOLATILE;
CREATE FUNCTION
pruebas=# ALTER FUNCTION alt_tasa( des1 bpchar) OWNER TO postgres;
ALTER FUNCTION
pruebas=# SELECT alt_tasa('porc');
alt_tasa
----------
(1 fila)
pruebas=# SELECT * FROM tasas;
cod_tasa | descrip
----------+---------
1 | anual
2 | mens
3 | semes
4 | porc
(4 filas)
La función, copie y pegue... como veras, me funciona sin problemas...
Cita:
Iniciado por mariovargascareaga cuando ejecuto la funcion select alt_tasa('porcentaje semestral') me sale el sgte error.....
ERROR: duplicate key violates unique constraint "cod_tasa"
Estado SQL:23505
Contexto:SQL statement "INSERT INTO tasas (descrip) VALUES ($1)"
PL/pgSQL function "alt_uni" line 7 at SQL statement
por lo que lei esto no deberia ocurrir porque deberia insertarnos el numero que sigue en nuestra secuencia en este caso 4 pero como sabemos el error pasa porq al tratar de ingresar el campo cod_tasa que es de tipo serial obviamente esta tomando el valor de 1 si lo ejecuto nuevamente tomara el valor 2 y me dara el mismo error
raro... algo demás debes estar haciendo que no estás comentando...
Cita:
Iniciado por mariovargascareaga modifique el insert
INSERT INTO tasas
(cod_tasa,descrip)
VALUES
(nextval('tasas_cod_tasa_seq'),des1);
aquí, sí hay un error... y distinto al que mencionas más adelante... sí ejecutas tal cual, debería botar:
ERROR: no existe la columna «des1»
ya que el segundo parámetro está esperando un varchar, y no es lo que le estás pasando... corrigiendo:
Código:
pruebas=# INSERT INTO tasas
pruebas-# (cod_tasa,descrip)
pruebas-# VALUES
pruebas-# (nextval('tasas_cod_tasa_seq'),'des1');
INSERT 0 1
pruebas=# SELECT * FROM tasas;
cod_tasa | descrip
----------+---------
1 | anual
2 | mens
3 | semes
4 | porc
5 | des1
(5 filas)
donde se ve, que funciona perfectamente...
Cita:
Iniciado por mariovargascareaga y me sigue haciendo exactamente lo mismo sigue empezando de 1..
COmo puedo hacer para que mi campo serial ingrese apartir del ultimo registro?
es decir en este caso 4
ayuda porfa es urgente... gracias
Urgente? haberlo dicho antes... son 35€