Procedimientos almacenados

From: "Luis Flores soberon" <lmflores78(at)hotmail(dot)com>
To: alvherre(at)alvh(dot)no-ip(dot)org
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Procedimientos almacenados
Date: 2005-10-20 00:45:21
Message-ID: BAY20-F313CCA57F8412D99B3601C0730@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Alvaro:

Tengo una base de datos con varios esquemas y tengo una función que recibe
entre otros, un parámetros que corresponde al esquema del que se debe sacar
la información (todos los esquemas tienen exactamente la misma estructura).
A continuación les mando el procedimiento:

CREATE OR REPLACE FUNCTION regresaAbonos(char(8), numeric(13,2),
numeric(13,2), numeric(2), char(9)) returns setof abonoHolder as
'
DECLARE
cursorTemporal abonoHolder%rowtype; -- Cursor de tipo
abonoHolder (el tipo de registro que se va a crear
folioVenta ALIAS FOR $1; -- Alias para el
parámetro 1 que debe ser el folio de venta
saldoInicialParametro ALIAS FOR $2; -- Alias para el
parámetro 2 que debe ser el saldo incial
venta ALIAS FOR $3; -- Alias para el valor de la
venta
plazo ALIAS FOR $4; -- Alias para el
parámetro 4 que debe ser el plazo de venta
esquema ALIAS FOR $5; -- Alias para el parámetro 5 que debe ser el
esquema
saldoInicial numeric(9,2); -- Variable para ir
controlando el saldo del cliente
contadorQuincena int2; -- Contador para ir
sacando el consecutivo de las quincenas pagadas

BEGIN
-- Aquí el saldo real se da por el valor de la venta actual más el monto
de la venta actual
-- La variable saldoInicial se irá decrementando y su valor inicial será
el parámetro pasado en el argumento 2
IF (saldoInicialParametro IS NULL AND venta IS NOT NULL) THEN
IF (venta IS NOT NULL) THEN
saldoInicial = venta;
ELSE
saldoInicial = 0;
END IF;
ELSE
IF (venta IS NOT NULL) THEN
saldoInicial = saldoInicialParametro + venta;
ELSE
saldoInicial = saldoInicialParametro;
END IF;
END IF;
contadorQuincena = 1;
-- Abrimos el cursor con la consulta a la tabla de los abonos hechos al
folio de venta pasado como parámetro 1
FOR cursorTemporal IN SELECT
a.id,a.rfc_clie,a.foliovta,a.quincena,a.importe,b.desc_nom
FROM tabasco.vtasabod as a,tabasco.catnomi as b
WHERE foliovta = folioVenta AND a.tiponom = b.cve_nom
ORDER BY a.quincena
LOOP

-- Recorremos el cursor poniendo al campo saldo del cursor el saldo
incial menos el abono dado, Decrementamos el saldo Inicial
cursorTemporal.saldo = saldoInicial - cursorTemporal.importe;
saldoInicial = saldoInicial - cursorTemporal.importe;
cursorTemporal.numeroQuincena = contadorQuincena::text || ''/'' ||
plazo::text;
contadorQuincena = contadorQuincena + 1;
-- Regresamos el registro recién creado
RETURN NEXT cursorTemporal;
END LOOP;
-- Si no tenemos ningún registro creamos uno en blanco con el saldo
if (contadorQuincena < 2) THEN
cursorTemporal.saldo = saldoInicial;
RETURN NEXT cursorTemporal;
END IF;
RETURN;
END'
LANGUAGE 'plpgsql';

Así jala de maravilla, pero cuando cambio tabasco por el alias esquema, no
lo sustituye:
"FROM esquema.vtasabod as a,esquema.catnomi as b"
Me dice que el esquema "esquema" no existe y si lo pruebo con $5 me dice que
hay error de sintaxis
"FROM $5.vtasabod as a,$5.catnomi as b"

Por qué no lo sustituye???

Gracias de antemano

Luis Flores

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message dario_d_s 2005-10-20 01:45:44 Re: Actualizar 8.0.1 a 8.0.3
Previous Message Javier Aquino H. 2005-10-20 00:41:27 Re: porque no usuar Access?