Thread: BUG #7784: trouble with pl ERROR: missing FROM-clause entry for table

BUG #7784: trouble with pl ERROR: missing FROM-clause entry for table

From
smatiz@hotmail.com
Date:
The following bug has been logged on the website:

Bug reference:      7784
Logged by:          Santiago Matiz Vasquez
Email address:      smatiz@hotmail.com
PostgreSQL version: 9.2.2
Operating system:   MAC LION 10.7.4
Description:        =



CREATE OR REPLACE FUNCTION financiero.marchar(pidproducto int,pcant
int,pnrocuenta int,pcedula character varying(20)) RETURNS character
varying(100) AS $$
DECLARE
 valores inventarios.productos%ROWTYPE;
 mesa general.mesa%ROWTYPE;
 =

 nromesa int;
 valorTOTAL real;
 valorIVA integer;

 salida character varying(100);
BEGIN

/* =

Busca dentro de la tabla de numero de cuenta la asociacion con la mesa
   si no la encuentra pone 0
*/
SELECT * INTO mesa FROM general.mesa WHERE nrocuenta =3D pnrocuenta;
IF (mesa.nrocuenta IS NULL) THEN
  nromesa :=3D 0;
ELSE
  nromesa :=3D mesa.nrocuenta;
END IF;

/* consulta el valor del producto */
 SELECT INTO valores * FROM inventarios.productos  WHERE
idproducto=3Dpidproducto;

RAISE NOTICE 'valores.iva (%)', =EF=BB=BFvalores.iva;

 valorTOTAL :=3D valores.valor * valores.iva * pcant;
 =



salida :=3D cast(valores.idproducto  as character varying(5))|| '|' ||
valores.nombre || '|' || CAST(valores.valor AS character varying(10)) || '|'
|| CAST(pcant  AS character varying(10)) ;


/*crea el cargo*/
INSERT INTO
financiero.cargos(valoru,idmesa,cedula,idproducto,cant,nrocuenta,valor_iva,=
iva)
VALUES
(valorTOTAL,nromesa,pcedula,pidproducto,pcant,pnrocuenta,0,valores.iva);


    RETURN salida;

    =

END;
$$ LANGUAGE plpgsql;


execute : =

select financiero.marchar(1,1,1,'1');


result:
ERROR:  missing FROM-clause entry for table "=EF=BB=BFvalores"
LINE 1: SELECT =EF=BB=BFvalores.iva
               ^
QUERY:  SELECT =EF=BB=BFvalores.iva
CONTEXT:  PL/pgSQL function
financiero.marchar(integer,integer,integer,character varying) line 31 at
RAISE


********** Error **********

ERROR: missing FROM-clause entry for table "=EF=BB=BFvalores"
SQL state: 42P01
Context: PL/pgSQL function
financiero.marchar(integer,integer,integer,character varying) line 31 at
RAISE



table :


CREATE TABLE inventarios.productos
(
  idproducto integer NOT NULL,
  nombre character varying(200),
  valor integer,
  iva real DEFAULT 1.16,
  CONSTRAINT pk_producto PRIMARY KEY (idproducto)
)
WITH (
  OIDS=3DFALSE
);
ALTER TABLE inventarios.productos
  OWNER TO dba;

Re: BUG #7784: trouble with pl ERROR: missing FROM-clause entry for table

From
David Johnston
Date:
smatiz wrote
> The following bug has been logged on the website:
>=20
> Bug reference:      7784
> Logged by:          Santiago Matiz Vasquez
> Email address:     =20

> smatiz@

> PostgreSQL version: 9.2.2
> Operating system:   MAC LION 10.7.4
> Description:       =20
>=20
>=20
> CREATE OR REPLACE FUNCTION financiero.marchar(pidproducto int,pcant
> int,pnrocuenta int,pcedula character varying(20)) RETURNS character
> varying(100) AS $$
>=20
> result:
> ERROR:  missing FROM-clause entry for table "=EF=BB=BFvalores"
> LINE 1: SELECT =EF=BB=BFvalores.iva
>                ^
> QUERY:  SELECT =EF=BB=BFvalores.iva
> CONTEXT:  PL/pgSQL function
> financiero.marchar(integer,integer,integer,character varying) line 31 at
> RAISE

From what I can infer from my reading the function you shown here should
work.

As the example is not self-contained it is difficult to prove whether it is
indeed correct or not.  The error indicates that the statement "SELECT
valores.iva" was attempted somewhere but that exact construct is not presen=
t
in the function shown.  I am also not sure exactly where line "31" is in th=
e
supplied code.

I suggest two steps to move along further:

First, make sure that you are executing the function that you think you are=
.=20
Search path issues may have cropped up somewhere and a previous, invalid,
version may still be sitting around somewhere.

Next (if necessary), try to narrow down, keep, and point out only the
offending code and whatever is minimally necessary to make it execute.

Unless the example provided is self-contained simply putting out the entire
code without any commentary makes it more difficult for people to provide
help.

David J.




--
View this message in context: http://postgresql.1045698.n5.nabble.com/BUG-7=
784-trouble-with-pl-ERROR-missing-FROM-clause-entry-for-table-tp5738676p573=
8698.html
Sent from the PostgreSQL - bugs mailing list archive at Nabble.com.

Re: BUG #7784: trouble with pl ERROR: missing FROM-clause entry for table

From
Tom Lane
Date:
smatiz@hotmail.com writes:
> RAISE NOTICE 'valores.iva (%)', valores.iva;

I see a UTF8 byte order mark (BOM) in front of "valores.iva" there,
which plpgsql is interpreting as part of the record name, so it doesn't
find any matching variable.  I'd be the first to agree that the error
message isn't too helpful.  But your text editor and your mailer didn't
do you any favors either, if they hid that BOM from you.

            regards, tom lane