Friday, July 11, 2008

Re: [pgsql-es-ayuda] ERROR EN COMPILACION FUNCTION

Muy buenas tardes muchachos ya logre compilar la FUNCTIOn y crearla pero no se como la puede ejecutar, alguno de uds me puede ayudar???

2008/7/11 Fabio Arias <fharias@gmail.com>:
Muy buenos dias muchachos, estoy empezando con la creacion de funciones y tengo este error y no se por que es?

Si me pueden dar una mano para mejorarlo les agradecere mucho....

=== psql 1 ===
psql:129: ERROR:  syntax error at end of input
LINEA 1: SELECT

########################################################################
CREATE FUNCTION ANULAR_APUESTA(IDTRANSACCION INTEGER, COLILLA VARCHAR, ACEPTACION_AEL VARCHAR, IDUSUARIO_REG VARCHAR) RETURNS INTEGER AS $$
DECLARE
    USUARIO "TSO"."USUARIO"%ROWTYPE;
    CUENTAUSUARIO "TSO"."CUENTA"%ROWTYPE;
    DISTRIBUIDOR "TSO"."CLIENTE"%ROWTYPE;
    CUENTADISTRIBUIDOR "TSO"."CUENTA"%ROWTYPE;
    PUNTODEVENTA "TSO"."CLIENTE"%ROWTYPE;
    TRANSACCION "TSO"."TRANSACCION"%ROWTYPE;
    SALDOFINAL NUMERIC(10,2);
    SALDOCOMISION NUMERIC(10,2);
    COMISIONPRODUCTODIS "TSO"."COMISION"%ROWTYPE;
    COMISIONPRODUCTOPDV "TSO"."COMISION"%ROWTYPE;
    COMISION NUMERIC(10,2);
    VALORCOMISION NUMERIC(10,2);
    IDTRANSACCION_ANULACION INTEGER;
    IDNOVEDAD INTEGER;
BEGIN
    -- CONSULTAR TRANSACCION
    SELECT * INTO TRANSACCION FROM "TSO"."TRANSACCION" WHERE "TRAN_ID"=IDTRANSACCION;
    IF NOT FOUND THEN
        RAISE EXCEPTION 'NO EXISTE TRANSACCION %',IDTRANSACCION;
        RETURN;
    END IF;
    -- BUSCAR USUARIO DE TRANSACCION
    SELECT * INTO USUARIO FROM "TSO"."USUARIO" WHERE "USUA_ID"=TRANSACCION."USUA_ID";
    IF NOT FOUND THEN
        RAISE EXCEPTION 'NO EXISTE USUARIO DE TRANSACCION %',IDTRANSACCION;
        RETURN;
    END IF;
    SELECT * INTO CUENTAUSUARIO FROM "TSO"."CUENTA" WHERE USUARIO."CUEN_ID";
    IF NOT FOUND THEN
        RAISE EXCEPTION 'NO EXISTE CUENTA PARA USUARIO %',USUARIO."USUA_ID";
        RETURN;
    END IF;
    SELECT * INTO PUNTODEVENTA FROM "TSO"."CLIENTE" WHERE "CLIE_ID"=USUARIO."CLIE_ID";
    IF NOT FOUND THEN
        RAISE EXCEPTION 'NO EXISTE PUNTO DE VENTA PARA USUARIO %',USUARIO."USUA_ID";
        RETURN;
    END IF;
    SELECT * INTO DISTRIBUIDOR FROM "TSO"."CLIENTE" WHERE "CLIE_ID"=PUNTODEVENTA."CLIE_PADRE";
    IF NOT FOUND THEN
        RAISE EXCEPTION 'NO EXISTE DISTRIBUIDOR PARA PUNTO DE VENTA %',PUNTODEVENTA."CLIE_ID";
        RETURN;
    END IF;
    SELECT * INTO CUENTADISTRIBUIDOR FROM "TSO"."CUENTA" WHERE "CUEN_ID"=DISTRIBUIDOR."CUEN_ID";
    IF NOT FOUND THEN
        RAISE EXCEPTION 'NO EXISTE CUENTA PARA DISTRIBUIDOR %',DISTRIBUIDOR."CLIE_ID";
        RETURN;
    END IF;
   
    -- INSERTAR MOVIMIENTO DE REVERSO DE VENTA
    SALDOFINAL := CUENTAUSUARIO."CUEN_SALDO"+TRANSACCION."TRAN_VALOR";
   
    INSERT INTO "TSO"."MOVIMIENTOSCUENTA" (
    "CUEN_ID","TRAN_ID","TIMC_ID","MOCU_FECHAMOVIMIENTO",
    "MOCU_SOBREGIROACTUAL", "MOCU_SALDOACTUAL",
    "MOCU_SOBREGIRO","MOCU_SALDO", "MOCU_REGISTRADOPOR", "MOCU_VALOR")
    VALUES(
    CUENTAUSUARIO."CUEN_ID",IDTRANSACCION,13,now(),
    0,SALDOFINAL,
    CUENTAUSUARIO."CUEN_SOBREGIRO",CUENTAUSUARIO."CUEN_SALDO",IDUSUARIO_REG,TRANSACCION."TRAN_VALOR");

    -- ACTUALIZAR EL SALDO DEL USUARIO
    UPDATE "TSO"."CUENTA" SET "CUEN_SALDO"="CUEN_SALDO"+TRANSACCION."TRAN_VALOR"
    WHERE "CUEN_ID"=CUENTAUSUARIO."CUEN_ID";

    -- BUSCAR COMISION LINEAL PDV
    SELECT * INTO COMISIONPRODUCTOPDV FROM "TSO"."COMISION" WHERE
    "USUA_ID"=USUARIO."USUA_ID" AND "PROD_ID"=TRANSACCION."PROD_ID"
    AND "TICO_ID"=2;
    IF NOT FOUND THEN
        COMISION := 0;
    ELSE
        COMISION := COMISIONPRODUCTOPDV."COMI_VALOR";
    END IF;
    VALORCOMISION := TRANSACCION."TRAN_VALOR"*(COMISION/100);
    SALDOCOMISION := SALDOFINAL;
    SALDOFINAL := SALDOFINAL-VALORCOMISION;
    -- INSERTAR MOVIMIENTO DE REVERSO DE COMISION
    INSERT INTO "TSO"."MOVIMIENTOSCUENTA" (
    "CUEN_ID","TRAN_ID","TIMC_ID","MOCU_FECHAMOVIMIENTO",
    "MOCU_SOBREGIROACTUAL", "MOCU_SALDOACTUAL",
    "MOCU_SOBREGIRO","MOCU_SALDO", "MOCU_REGISTRADOPOR", "MOCU_VALOR")
    VALUES(
    CUENTAUSUARIO."CUEN_ID",IDTRANSACCION,14,now(),
    0,SALDOFINAL,
    CUENTAUSUARIO."CUEN_SOBREGIRO",SALDOCOMISION,IDUSUARIO_REG,VALORCOMISION);
    -- ACTUALIZAR EL SALDO DEL USUARIO
    UPDATE "TSO"."CUENTA" SET "CUEN_SALDO"="CUEN_SALDO"-VALORCOMISION
    WHERE "CUEN_ID"=CUENTAUSUARIO."CUEN_ID";

    -- BUSCAR COMISION LINEAL DIS
    SELECT * INTO COMISIONPRODUCTODIS FROM "TSO"."COMISION" WHERE
    "CLIE_ID"=DISTRIBUIDOR."CLIE_ID" AND "PROD_ID"=TRANSACCION."PROD_ID"
    AND "TICO_ID"=3;
    IF NOT FOUND THEN
        COMISION := 0;
    ELSE
        COMISION := COMISIONPRODUCTODIS."COMI_VALOR";
    END IF;
    VALORCOMISION := TRANSACCION."TRAN_VALOR"*(COMISION/100);
    SALDOFINAL := CUENTADISTRIBUIDOR."CUEN_SALDO"-VALORCOMISION;
    -- INSERTAR REVERSO COMISION DE DISTRIBUIDOR
    INSERT INTO "TSO"."MOVIMIENTOSCUENTA" (
    "CUEN_ID","TRAN_ID","TIMC_ID","MOCU_FECHAMOVIMIENTO",
    "MOCU_SOBREGIROACTUAL", "MOCU_SALDOACTUAL",
    "MOCU_SOBREGIRO","MOCU_SALDO", "MOCU_REGISTRADOPOR", "MOCU_VALOR")
    VALUES(
    CUENTADISTRIBUIDOR."CUEN_ID",IDTRANSACCION,15,now(),
    0,SALDOFINAL,
    CUENTADISTRIBUIDOR."CUEN_SOBREGIRO",CUENTADISTRIBUIDOR."CUEN_SALDO",IDUSUARIO_REG,VALORCOMISION);
    -- ACTUALIZAR SALDO DE DISTRIBUIDOR
    UPDATE "TSO"."CUENTA" SET "CUEN_SALDO"="CUEN_SALDO"-VALORCOMISION
    WHERE "CUEN_ID"=CUENTADISTRIBUIDOR."CUEN_ID";
    --- TERMINADO EL ANULADO
    --- CREAR TRANSACCION DE ANULACION
    INSERT INTO "TSO"."TRANSACCION" (
    "TITR_ID", "PROD_ID", "USUA_ID", "TRAN_FECHA", "TRAN_VALOR", "TRAN_ESTADO", "TRAN_REGISTRADOPOR")
    VALUES (32, 2, IDUSUARIO_REG, now(), TRANSACCION."TRAN_VALOR", '1', IDUSUARIO_REG);
    SELECT currval('"TSO"."TRANSACCION_TRAN_ID_seq"') INTO IDTRANSACCION_ANULACION;

    -- INSERTAR NOVEDAD DE TRANSACCION
    INSERT INTO "TSO"."NOVEDADTRANSACCION"(
    "NOVE_ID", "TRAN_ID", "NOTR_IDTRANSACCION", "NOTR_OBSERVACION", "NOTR_REGISTRADOPOR")
    VALUES (5, IDTRANSACCIONANULACION, IDTRANSACCION, ACEPTACION_AEL, IDUSUARIO_REG);
    SELECT currval('"TSO"."NOVEDADTRANSACCION_NOTR_ID_seq"') INTO IDNOVEDAD;
    RETURN IDNOVEDAD;
END;
$$ LANGUAGE plpgsql;
########################################################################

--
Fabio Hernando Arias Vera
Cel. 314 411 7776



--
Fabio Hernando Arias Vera
Cel. 314 411 7776

No comments: