![]() |
眼睛小的蚂蚁 · 解决 invalid multibyte ...· 1 年前 · |
![]() |
踏实的毛衣 · 连接rabbitmq的两种方式,URI须注意 ...· 1 年前 · |
![]() |
体贴的风衣 · 进程/线程上下文切换会用掉你多少CPU? - 知乎· 1 年前 · |
![]() |
小眼睛的帽子 · C 语言实例 – 计算字符串长度 | 菜鸟教程· 1 年前 · |
![]() |
仗义的手术刀 · 因果推断&案例集锦 - 知乎· 2 年前 · |
我将表从一种模式复制到另一种模式。我正在试图传递要复制的表的名称的参数。但是,当我执行调用时,不会在Schema中创建任何表。
命令:
CALL copy_table('firstname', 'tableName1,tableName2,tableName3');
CREATE OR REPLACE PROCEDURE copy_table(user VARCHAR(50), strs TEXT)
LANGUAGE PLPGSQL
AS $$
DECLARE
my_array TEXT;
BEGIN
FOR my_array IN
SELECT string_to_array(strs, ',')
EXECUTE 'CREATE TABLE ' || user || '.' || my_array || ' (LIKE public.' || my_array || ' INCLUDING ALL)';
END LOOP;
$$
你能帮忙吗?谢谢。
发布于 2022-05-27 13:55:00
函数
string_to_array
返回一个数组值。循环遍历数组是由
FOREACH
命令执行的,而不是由
FOR
执行的。
见文件:
https://www.postgresql.org/docs/14/plpgsql-control-structures.html#PLPGSQL-FOREACH-ARRAY
CREATE FUNCTION sum(int[]) RETURNS int8 AS $$
DECLARE
s int8 := 0;
x int;
BEGIN
FOREACH x IN ARRAY $1
s := s + x;
END LOOP;
RETURN s;
$$ LANGUAGE plpgsql;
发布于 2022-05-29 23:04:00
像西蒙建议的那样,用
FOREACH
循环数组。或在旧版本(或任何版本)中使用
FOR
。请参见:
通常,基于集合的解决方案会越来越短,但是:
CREATE OR REPLACE PROCEDURE copy_tables(_schema text, VARIADIC _tables text[])
LANGUAGE plpgsql AS
$proc$
![]() |
踏实的毛衣 · 连接rabbitmq的两种方式,URI须注意 - 掘金 1 年前 |
![]() |
体贴的风衣 · 进程/线程上下文切换会用掉你多少CPU? - 知乎 1 年前 |
![]() |
小眼睛的帽子 · C 语言实例 – 计算字符串长度 | 菜鸟教程 1 年前 |
![]() |
仗义的手术刀 · 因果推断&案例集锦 - 知乎 2 年前 |