gpt4 book ai didi

postgresql - 如何选择从postgres中的函数参数创建的表名

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

我通过将参数作为表的名称在函数中创建了一个表,作为我必须选择并更新同一个表的函数的延续

CREATE OR REPLACE FUNCTION mnth
(
tablename text
folder_path text
)
RETURNS void as $$
BEGIN
EXECUTE format (
'CREATE TABLE %I.%I
(
row_id text,
left_row text,
right_row text,
left_plus text
)' , 'monthly',tablename
);

INSERT INTO edmonton.rid_pid
SELECT
row_id,
SPLIT_PART (row_id, '-',1) as left_may,
SPLIT_PART (row_id, '-',2) as right_may
FROM '%I.%I','monthly',tablename ;

UPDATE '%I.%I','monthly',tablename
SET left_plus = left_row:: integer +1 ;
END;
$$ LANGUAGE plpgsql;

我想知道如何获取选择和更新查询的函数参数

最佳答案

也许在这里你需要一个过程而不是一个函数(如果你不需要你的函数之外的东西,它似乎更好)。 (https://www.postgresql.org/docs/11/sql-createprocedure.html)(仅限 Postgresql 11)

如果你想了解格式功能: http://www.postgresqltutorial.com/postgresql-format/

也许这段代码就是您所需要的(或足够接近它)

CREATE OR REPLACE PROCEDURE mnth
(
tablename text
) LANGUAGE plpgsql as $$
declare query varchar;
BEGIN
EXECUTE format (
'CREATE TABLE IF NOT EXISTS %s.%s
(
row_id text,
left_row text,
right_row text,
left_plus text
)', 'monthly',cast(tablename as varchar)
);

query := 'INSERT INTO edmonton.rid_pid
SELECT
row_id,
cast(SPLIT_PART(row_id, ''-'',1) as varchar) as left_may,
cast(SPLIT_PART (row_id, ''-'',2) as varchar) as right_may
FROM monthly.test;';
execute query;
query := 'UPDATE monthly.'||tablename||'
SET left_plus = left_row::integer +1;';
execute query;
END;
$$;

-- to call it
call mnth(cast('test' as text));

希望这对您有所帮助。

关于postgresql - 如何选择从postgres中的函数参数创建的表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56421536/

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