gpt4 book ai didi

sql - PostgreSQL 声明具有显式数据类型的变量

转载 作者:行者123 更新时间:2023-11-29 11:32:51 24 4
gpt4 key购买 nike

我已经阅读了文档和一些 SO 帖子,但仍然不清楚变量是如何在 Postgres 中声明和分配的......这是我最初尝试做的:

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
*/

这很简单,但它不起作用......我是 Postgres 语法的新手,我希望得到一些帮助来解决这个问题,因为我想明确声明数据类型,如果可能的话,在将数据设置为变量之前。

你们中有人知道我在设置变量时显式声明数据类型时到底错过了什么吗?

编辑 1:2013 年 9 月 5 日

有人指出变量必须在函数内使用。我不相信 Postgres 完全是这种情况(我知道 MySQL 是这样,而不是 T-SQL),但关键是,这里是上面的代码,在一个函数的上下文中。我将很快测试一个答案中指出的内容,并相应地接受。所以这是到目前为止的完整代码:

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

编辑 2:2013 年 9 月 6 日

我使用了 select into myVar ... 语法,但现在我遇到了一个完全不同的问题...我应该问一个新问题吗?

错误:

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

代码:

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
);

最佳答案

您只能在函数(存储过程)内声明变量。尝试这样的事情:

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;

关于sql - PostgreSQL 声明具有显式数据类型的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25696117/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com