pgsql concat for number 返回 null
pgsql concat for number returning null
我创建了如下序列:
CREATE SEQUENCE public.shiwangini_seq
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 150037
CACHE 1
NO CYCLE;
在此之后 - 我创建了一个将使用此序列生成下一个值的函数:
create or replace function shiwangini_unq(out v_final_value2 bigint) as $$
declare
v_seq_value bigint;
v_shard_id bigint;
v_final_value2 bigint ;
begin
select nextval('shiwangini_seq') into v_seq_value ;
v_shard_id := 2;
select concat (v_seq_value , v_shard_id ) into v_final_value2 ;
end ;
$$ language plpgsql ;
现在,这个函数 returns 每当我调用它时都会为 null。如下图:
select shiwangini_unq(); ----null
我检查过 concat() 本身管理类型转换。即使在那之后,在我的例子中它也返回 null。我真的很感激能帮助它工作。提前致谢!
您将函数的 return 类型作为输入,这就是问题所在。如果有任何错误,下面的代码对我来说效果很好,请给我发短信。
试试这个
create or replace function shiwangini_unq() returns bigint as $$
declare
v_seq_value bigint;
v_shard_id bigint;
v_final_value2 bigint ;
begin
select nextval('shiwangini_seq') into v_seq_value ;
v_shard_id := 2;
select concat (v_seq_value, v_shard_id ) into v_final_value2 ;
return v_final_value2;
end ;
$$ language plpgsql ;
您的主要问题是,变量 v_final_value2
掩盖了您的输出参数。
但这并不是开始所需要的。
您应该声明一个正确的 return 类型。但是你在这里把事情复杂化了。您可以在没有 PL/pgSQL 和简单的 SQL 函数的情况下提高效率:
create or replace function shiwangini_unq()
return bigint
as $$
select concat(nextval('shiwangini_seq'), 2)::bigint;
$$ language sql;
您可以将其编写为正常的 SQL 函数(不带 OUT 参数)并消除所有数据对话。
create or replace
function shiwangini_unq()
returns bigint
language sql
as $$
select 10*nextval('shiwangini_seq')+2;
$$;
或者完全删除该功能。
create sequence shiwangini_seqX start with 12 increment by 10;
见demo
我创建了如下序列:
CREATE SEQUENCE public.shiwangini_seq
INCREMENT BY 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 150037
CACHE 1
NO CYCLE;
在此之后 - 我创建了一个将使用此序列生成下一个值的函数:
create or replace function shiwangini_unq(out v_final_value2 bigint) as $$
declare
v_seq_value bigint;
v_shard_id bigint;
v_final_value2 bigint ;
begin
select nextval('shiwangini_seq') into v_seq_value ;
v_shard_id := 2;
select concat (v_seq_value , v_shard_id ) into v_final_value2 ;
end ;
$$ language plpgsql ;
现在,这个函数 returns 每当我调用它时都会为 null。如下图:
select shiwangini_unq(); ----null
我检查过 concat() 本身管理类型转换。即使在那之后,在我的例子中它也返回 null。我真的很感激能帮助它工作。提前致谢!
您将函数的 return 类型作为输入,这就是问题所在。如果有任何错误,下面的代码对我来说效果很好,请给我发短信。 试试这个
create or replace function shiwangini_unq() returns bigint as $$
declare
v_seq_value bigint;
v_shard_id bigint;
v_final_value2 bigint ;
begin
select nextval('shiwangini_seq') into v_seq_value ;
v_shard_id := 2;
select concat (v_seq_value, v_shard_id ) into v_final_value2 ;
return v_final_value2;
end ;
$$ language plpgsql ;
您的主要问题是,变量 v_final_value2
掩盖了您的输出参数。
但这并不是开始所需要的。
您应该声明一个正确的 return 类型。但是你在这里把事情复杂化了。您可以在没有 PL/pgSQL 和简单的 SQL 函数的情况下提高效率:
create or replace function shiwangini_unq()
return bigint
as $$
select concat(nextval('shiwangini_seq'), 2)::bigint;
$$ language sql;
您可以将其编写为正常的 SQL 函数(不带 OUT 参数)并消除所有数据对话。
create or replace
function shiwangini_unq()
returns bigint
language sql
as $$
select 10*nextval('shiwangini_seq')+2;
$$;
或者完全删除该功能。
create sequence shiwangini_seqX start with 12 increment by 10;
见demo