繁体   English   中英

postgres函数内部的准备好的语句

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM