[英]prepared statement inside function in postgres
我可以在MySQL中执行以下操作,但想知道如何在PostgreSQL中进行等效操作。 我必须将查询包装在字符串中,因为表名是可变的(不能只运行CREATE TABLE
)。 这全部在MySQL存储过程/ Postgres函数中。
SET @createTable = CONCAT("CREATE TABLE ", table_name, "(
id int(11) NOT NULL AUTO_INCREMENT,
something varchar(255) NOT NULL");
PREPARE createTableStmt FROM @createTable;
EXECUTE createTableStmt;
DEALLOCATE PREPARE createTableStmt;
有人可以告诉我如何在Postgres中执行此操作吗?
要运行一次 ,只需运行串联的CREATE TABLE
语句。
要封装功能以与变量表名称重复使用,请使用带有EXECUTE
的plpgsql函数:
CREATE OR REPLACE FUNCTION create_my_table(_tbl text)
RETURNS void AS
$func$
BEGIN
EXECUTE format('CREATE TABLE %I (id serial, something varchar(255) NOT NULL)', _tbl);
END
$func$ LANGUAGE plpgsql;
呼叫:
SELECT create_my_table('foo_table');
下降:
DROP create_my_table(text);
或者,如果仅在当前会话中需要它,则可以将其设置为临时功能,并在会话结束时自动将其删除:
CREATE OR REPLACE FUNCTION pg_temp.create_my_table(_tbl text) ...
使用串行列在Postgres中实现AUTOINCREMENT
:
您可能还希望将列PRIMARY KEY
为。
而且varchar(255)
几乎没有道理。 我只用text
代替:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.