> Probablemente se haya planteado anteriormente el caso. Algunas veces
> uno modifica estructuras de una vista remota, para ello (cuando
> cambian los campos que la componen, por ejemplo) necesita eliminarla y
> volver a crearla. El problema se presenta si esa vista es utilizada en
> una función, ya que al borrarla no genera ninguna advertencia y luego
> al ejecutar la función nos devuelve un error sobre un objeto
> inexistente (adjunto un ejemplo).
Esto fue corregido hasta cierto punto en 8.3. Tu ejemplo funciona:
alvherre=> CREATE TABLE _test AS SELECT 1::SMALLINT;
SELECT
alvherre=> CREATE OR REPLACE VIEW _vtest AS SELECT * FROM _test;
CREATE VIEW
alvherre=> CREATE FUNCTION _ftest() RETURNS void AS
alvherre-> $BODY$ BEGIN PERFORM 1 FROM _vtest; RETURN; END $BODY$ LANGUAGE 'plp
sql' VOLATILE;
CREATE FUNCTION
alvherre=> SELECT * FROM _ftest();
_ftest
--------
(1 ligne)
alvherre=> DROP VIEW _vtest;
DROP VIEW
alvherre=> CREATE VIEW _vtest AS SELECT *, 2 FROM _test;
CREATE VIEW
alvherre=> SELECT * FROM _ftest();
_ftest
--------
(1 ligne)
--
Alvaro Herrera http://www.amazon.com/gp/registry/CTMLCN8V17R4
"Puedes elegir el color de tu auto -- siempre y cuando sea negro."
(Henry Ford)
--
TIP 5: ¿Has leído nuestro extenso FAQ?
http://www.postgresql.org/docs/faqs.FAQ.html
No comments:
Post a Comment