PostgreSQL deklariert variables mit expliziten datatypen

Ich habe die Dokumentation und einige SO-Posts gelesen, aber es ist immer noch unklar, wie variables in Postgres deklariert und zugewiesen werden … Das habe ich ursprünglich versucht:

SET SEARCH_PATH = PsychoProductions; declare var_person_id INT; select var_person_id = ( select id from person where first_name = prm_first_name AND last_name = prm_last_name AND organization = prm_organization ); /* Result: ERROR: syntax error at or near "INT" LINE 2: DECLARE var_person_id INT; ^ ********** Error ********** ERROR: syntax error at or near "INT" SQL state: 42601 Character: 70 */ 

Es ist einfach, aber es funktioniert nicht … Ich bin irgendwie neu in der Postgres-Syntax, und ich hatte gehofft, Hilfe zu bekommen, um das herauszufinden, da ich datatypen, wenn möglich, explizit deklarieren möchte, bevor ich data setze zu variables.

Weiß jemand von euch, was ich vermisse, um datatypen explizit zu deklarieren, während ich eine Variable setze?

EDIT 1: 09-05-2013

Einige haben darauf hingewiesen, dass variables innerhalb einer function verwendet werden müssen. Ich glaube nicht, dass das bei Postgres völlig der Fall ist (ich weiß, dass es bei MySQL ist und nicht bei T-SQL), aber auf den Punkt, hier ist der obige Code, im Kontext innerhalb einer function. Ich werde in Kürze prüfen, was in einer Antwort darauf hingewiesen wurde, und entsprechend akzeptieren. Also hier ist der vollständige Code soweit:

 set search_path = PsychoProductions; create or replace function fcn_Insert_person ( -- "person" table prm_role_id text, -- table default 'Customer' prm_first_name text, prm_last_name text, prm_organization text, prm_website text, prm_default_Billing_Method_ID text, -- table default 'Net 30' prm_active BOOLEAN, -- "address" table prm_address_type_id text, -- table default 'Unique' prm_address text, prm_city text, prm_state text, prm_zip_code text, -- "email" table prm_email_address text, prm_email_type_id text, -- table default 'Business' -- "phone" table prm_phone_number text, prm_phone_type_id text -- table default 'Main' ) returns setof Person as $delimiter$ begin set search_patch = PsychoProductions; start transaction; insert into person ( role_id, first_name, last_name, organization, website, default_billing_method_id, active ) values ( prm_role_id, prm_first_name, prm_last_name, prm_organization, prm_website, prm_default_Billing_Method_ID, prm_active ); commit; start transaction; declare var_person_id int; select var_person_id = ( select id from person where first_name = prm_first_name AND last_name = prm_last_name AND organization = prm_organization ); -- and this is where I got stuck 

EDIT 2: 09-06-2013

Ich habe die select into myVar ... Syntax verwendet, aber jetzt bekomme ich ein ganz anderes Problem … Soll ich eine neue Frage stellen?

Error:

 ERROR: column "var_person_id" does not exist LINE 81: var_person_id, ^ ********** Error ********** ERROR: column "var_person_id" does not exist SQL state: 42703 Character: 2220 

Code:

 start transaction; -- declare var_person_id int; select id into var_person_id from person where first_name = prm_first_name AND last_name = prm_last_name AND organization = prm_organization; insert into address ( person_id, address_type_id, address, city, state, zip_code ) values ( var_person_id, -- error here prm_address_type_id, prm_address, prm_city, prm_state, per_zip_code ); 

Solutions Collecting From Web of "PostgreSQL deklariert variables mit expliziten datatypen"

Sie können variables nur innerhalb einer function (Stored Procedure) deklarieren. Versuchen Sie etwas wie folgt:

 CREATE FUNCTION my_func(prm_first_name text,prm_last_name text) RETURNS SET OF int $$ DECLARE var_person_id int; BEGIN SELECT id INTO var_person_id FROM person,var_parameter WHERE first_name = prm_first_name AND last_name = prm_last_name AND organization = prm_organization; -- OR var_person_id := (SELECT id FROM ...); -- use it later like this: RETURN QUERY SELECT ... FROM ... WHERE id=var_person_id; END; $$ LANGUAGE PLPGSQL;