问题描述
大家好,我在为学校开发管理应用程序,遇到了这个问题:
create or replace procedure create_school_schema(title text)
as
$BODY$
create schema title;
$BODY$
language sql
它不将参数值用作模式名称,而是将“ title”作为模式名称? 有了功能,它也能正常工作,但作为回报,它向我显示了我正在传递的参数值。
解决方法
使用EXECUTE
的示例函数:
CREATE OR REPLACE PROCEDURE public.create_school_schema(title text)
LANGUAGE plpgsql
AS $procedure$
BEGIN
EXECUTE format('CREATE SCHEMA %I',title);
END;
$procedure$
;
要使用EXECUTE
,您将需要使用plpgsql语言。然后,使用format函数将title
变量作为标识符添加到CREATE SCHEMA
语句中。所以:
\dn
List of schemas
Name | Owner
--------+----------
public | postgres
test | postgres
call create_school_schema('school');
CALL
\dn
List of schemas
Name | Owner
--------+----------
public | postgres
school | postgres
test | postgres