Función y Esquema

Función y Esquema

Cuando se crea una función, se establece el esquema en el cual se va hace uso de esa función. Pero si dentro del cuerpo de la función instanciamos algun objeto del mismo esquema es necesario establecer dicho esquema, o se asume que el mismo pertenece al mismo esquema en el que se encuentra la función?

Por ejemplo:


SET SEARCH_PATH TO esquema;

CREATE OR REPLACE FUNCTION fc_ejemplo(CHARACTER VARYING)
RETURNS NUMERIC AS
$BODY$
DECLARE
variable ALIAS FOR $1;

BEGIN
SELECT COALESCE(SUM(monto),0) INTO monto
FROM cualquier_tabla
WHERE x_campo = variable;

RETURN monto;

END;
$BODY$
LANGUAGE 'plpgsql';

La duda es si es necesario que la consulta a la tabla referenciada dentro del cuerpo de la función sea: esquema.cualquier_tabla
o solo cualquier_tabla

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Re: Función y Esquema

Si se utiliza SET SEARCH_PATH TO schema; antes de definir algo, lo definido se creara en el esquema definido por SEARCH_PATH.

En tu caso no se necesita usar "FROM esquema.cualquier_tabla" siempre y cuando la tabla "cualquier_tabla" solo exista en un solo esquema definido por SEARCH_PATH.

Si se van a usar diferentes esquemas en una base de datos, yo recomiendo usar "esquema.cualquier_objeto" para estar seguro que accedemos/usamos el objeto correcto y no el que primero aparezca en los esquemas definidos por SEARCH_PATH.

Enviar nuevo comentario

  • Las direcciones de las páginas web y las de correo se convierten en enlaces automáticamente.
  • Etiquetas HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd><h2><pre>
  • Saltos automáticos de líneas y de párrafos.

Más información sobre opciones de formato

Image CAPTCHA
Enter the characters shown in the image.