我通过获取参数作为表的名称在函数中创建了表,这是我必须选择并更新同一表的函数的延续
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;
我想知道如何获取用于选择和更新查询的函数参数
答案 0 :(得分:0)
也许在这里您需要一个过程而不是一个函数(如果您的函数中不需要任何东西,则看起来更好)。 (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));
希望这会有所帮助。