簡體   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