diff options
author | Bruce Momjian <bruce@momjian.us> | 2006-05-30 13:40:56 +0000 |
---|---|---|
committer | Bruce Momjian <bruce@momjian.us> | 2006-05-30 13:40:56 +0000 |
commit | 4d06e86d041b48a2ecd4f45e2ecbbcf69f3454c0 (patch) | |
tree | 0204196bb859d1cc81ce489a2d26e9046a92d371 /doc/src | |
parent | fc079f841146dda76e732b4d6f79c4478b890000 (diff) | |
download | postgresql-4d06e86d041b48a2ecd4f45e2ecbbcf69f3454c0.tar.gz postgresql-4d06e86d041b48a2ecd4f45e2ecbbcf69f3454c0.zip |
Revert patch, needs more work:
---------------------------------------------------------------------------
Add dynamic record inspection to PL/PgSQL, useful for generic triggers:
tval2 := r.(cname);
or
columns := r.(*);
Titus von Boxberg
Diffstat (limited to 'doc/src')
-rw-r--r-- | doc/src/sgml/plpgsql.sgml | 51 |
1 files changed, 1 insertions, 50 deletions
diff --git a/doc/src/sgml/plpgsql.sgml b/doc/src/sgml/plpgsql.sgml index ecbfb49f1f2..f0cbbf2896c 100644 --- a/doc/src/sgml/plpgsql.sgml +++ b/doc/src/sgml/plpgsql.sgml @@ -1,4 +1,4 @@ -<!-- $PostgreSQL: pgsql/doc/src/sgml/plpgsql.sgml,v 1.93 2006/05/30 12:03:12 momjian Exp $ --> +<!-- $PostgreSQL: pgsql/doc/src/sgml/plpgsql.sgml,v 1.94 2006/05/30 13:40:55 momjian Exp $ --> <chapter id="plpgsql"> <title><application>PL/pgSQL</application> - <acronym>SQL</acronym> Procedural Language</title> @@ -880,55 +880,6 @@ SELECT merge_fields(t.*) FROM table1 t WHERE ... ; </para> <para> - To obtain the values of the fields the record is made up of, - the record variable can be qualified with the column or field - name. This can be done either by literally using the column name - or the column name for indexing the record can be taken out of a scalar - variable. The syntax for this notation is Record_variable.(IndexVariable). - To get information about the column field names of the record, - a special expression exists that returns all column names as an array: - RecordVariable.(*) . - Thus, the RECORD can be viewed - as an associative array that allows for introspection of it's contents. - This feature is especially useful for writing generic triggers that - operate on records with unknown structure. - Here is an example procedure that shows column names and values - of the predefined record NEW in a trigger procedure: -<programlisting> - -CREATE OR REPLACE FUNCTION show_associative_records() RETURNS TRIGGER AS $$ - DECLARE - colname TEXT; - colcontent TEXT; - colnames TEXT[]; - coln INT4; - coli INT4; - BEGIN --- obtain an array with all field names of the record - colnames := NEW.(*); - RAISE NOTICE 'All column names of test record: %', colnames; --- show field names and contents of record - coli := 1; - coln := array_upper(colnames,1); - RAISE NOTICE 'Number of columns in NEW: %', coln; - FOR coli IN 1 .. coln LOOP - colname := colnames[coli]; - colcontent := NEW.(colname); - RAISE NOTICE 'column % of NEW: %', quote_ident(colname), quote_literal(colcontent); - END LOOP; --- Do it with a fixed field name: --- will have to know the column name - RAISE NOTICE 'column someint of NEW: %', quote_literal(NEW.someint); - RETURN NULL; - END; -$$ LANGUAGE plpgsql; ---CREATE TABLE test_records (someint INT8, somestring TEXT); ---CREATE TRIGGER tr_test_record BEFORE INSERT ON test_records FOR EACH ROW EXECUTE PROCEDURE show_associative_records(); - -</programlisting> - </para> - - <para> Note that <literal>RECORD</> is not a true data type, only a placeholder. One should also realize that when a <application>PL/pgSQL</application> function is declared to return type <type>record</>, this is not quite the |