Código SQL:
[/CODE]Ver original
CREATE OR REPLACE FUNCTION sp_incremental () RETURNS TRIGGER AS $BODY$ DECLARE ultimocodigo CHARACTER VARYING(100); parteTexto CHARACTER VARYING(100); parteNumerica CHARACTER VARYING(100); longitudNumerica INT; codigoNumerico CHARACTER VARYING(100); codigo CHARACTER VARYING(100); BEGIN ultimocodigo := (SELECT MAX(codigousuarioamigo) FROM TUsuarioAmigo); IF ultimocodigo IS NULL THEN ultimocodigo := 'USUARIOX0000000'; END IF; parteTexto := substr(ultimocodigo, 1, 8); parteNumerica := substr(ultimocodigo, 9, 7)|| 1 ; longitudNumerica := (SELECT LENGTH(parteNumerica)-6); codigoNumerico := concat(repeat('0', longitudNumerica), parteNumerica); codigo := concat(parteTexto, codigoNumerico); NEW.codigoUsuario := (SELECT codigo); EXCEPTION WHEN OTHERS THEN RAISE NOTICE 'SQL ERROR: %', SQLERRM; END $BODY$ LANGUAGE plpgsql; CREATE TRIGGER trggBeforeInsertTUsuario BEFORE INSERT ON TUsuario FOR EACH ROW EXECUTE PROCEDURE sp_incremental();
pero me sale el siguiente error al insertar una nueva fila
ERROR: la ejecución alcanzó el fin del procedimiento disparador sin encontrar RETURN
CONTEXT: función PL/pgSQL sp_incremental()
********** Error **********
ERROR: la ejecución alcanzó el fin del procedimiento disparador sin encontrar RETURN
SQL state: 2F005
Context: función PL/pgSQL sp_incremental()
llevo varios dias sin poder identificar que RETURN no se encuentra... vale aclarar que postgres no conozco mucho... de hecho este sp lo copie de MySQL