我正在嘗試在 pgsql 中創建一個存盤程序,該程序使用表中特定年份的資料創建一個物化視圖。引數將是表名、包含年份的列和年份。
我知道在 SQL Server 中它會是這樣的:
CREATE PROCEDURE createMaterializedView
@tablename varchar(100),
@column varchar(100),
@year integer
AS
BEGIN
DECLARE @return varchar(1000) = 'CREATE MATERIALIZED VIEW view_' @tablename '_' @year 'AS SELECT * from' @tablename 'where'
@column ' = ' @year
EXECUTE sp_executesql @return
END
在 pgsql 中,我現在得到的是:
CREATE PROCEDURE createMaterializedView(tablename varchar(100), column varchar (100), year integer)
LANGUAGE 'plpgsql'
AS $$
BEGIN
CREATE MATERIALIZED VIEW "view_" $tablename "_" $year
AS
SELECT * from tablename
WHERE column = year
END;
$$;
感謝任何幫助。
uj5u.com熱心網友回復:
考慮一個動態查詢,格式化為您的識別符號(視圖名稱、表、列)和文字值(年份),以使用EXECUTE.
CREATE OR REPLACE PROCEDURE create_materialized_view (
_tablename varchar(100),
_column varchar(100),
_year integer
)
LANGUAGE 'plpgsql' AS
$proc$
DECLARE
_vw text := 'view_' || _tablename || '_' || _year;
_sql text :=
'CREATE MATERIALIZED VIEW %I AS
SELECT * FROM %I WHERE %I = %L';
BEGIN
EXECUTE format(_sql, _vw, _tablename, _column, _year);
END
$proc$
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/442340.html
標籤:PostgreSQL plpgsql 动态 sql
上一篇:PostgreSQL如何生成每個父產品以便將所有子產品(和子產品)系結到它們(父產品)
下一篇:根據另一列的值選擇一列的值
