X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id 9CD048B9F74 for ; Sun, 13 Feb 2005 17:10:10 +0000 (GMT) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 93669-08 for ; Sun, 13 Feb 2005 17:10:07 +0000 (GMT) Received: from shakotay.alphanet.ch (shakotay.alphanet.ch [80.83.46.147]) by svr1.postgresql.org (Postfix) with ESMTP id DD7E78B9F5C for ; Sun, 13 Feb 2005 17:10:05 +0000 (GMT) Received: by shakotay.alphanet.ch (Postfix, from userid 103) id CE788370322; Sun, 13 Feb 2005 18:10:01 +0100 (CET) Received: by defian (Postfix, from userid 1000) id 853EC2C1CD; Sun, 13 Feb 2005 18:03:47 +0100 (MET) Date: Sun, 13 Feb 2005 18:03:47 +0100 From: Marc SCHAEFER To: pgsql-sql@postgresql.org Subject: Order of columns in a table important in a stored procedure? Message-ID: <20050213170347.GA2658@defian.alphanet.ch> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests= X-Spam-Level: X-Archive-Number: 200502/137 X-Sequence-Number: 20248 Hi, I use a FOR one_row IN loop where one_row is of type saisies%ROWTYPE. The loop does a SELECT on a table, bennes, changing a few values. The idea is that the function should return some bennes rows, but with additional information, which makes the returned rows a saisies table-like row set. I have however noticed that if the SELECT is *NOT* in the correct order for the table saisies, funny errors happen (such as type constraints -- obviously columns are mixed). What I do not understand is that I use AS in order to name the columns, I would think PostgreSQL could get the column names paired. This is annoying since it means that any change to the data structure, such as adding columns may make my functions non working. This is however an old version of PSQL (7.1 I think). For reference: CREATE OR REPLACE FUNCTION f_fa_montre(VOID) RETURNS SETOF saisies AS ' DECLARE one_row saisies%ROWTYPE; BEGIN FOR one_row IN SELECT NULL as idsaisie, b.no_client AS num_client, b.lieu_entreposage_b5 AS chantier, DATE_TRUNC(\'month\', CURRENT_DATE) AS dates, \'0\' AS num_bon, NULL AS num_art FROM bennes b WHERE (type_fact_p = b.type_fact) LOOP -- here I do some changes to the one_row, BTW RETURN NEXT one_row; END LOOP; RETURN; END;' LANGUAGE 'plpgsql'; The issue: if I exchange num_bon and dates above the query fails. Thank you for any idea.