PostgreSQL的:设置变量等于阵列中的

问题描述:

我有一个表newb,看起来像这样的特定条目:PostgreSQL的:设置变量等于阵列中的

tablename | columnname 
----------------------- 
walls  | id 
floors | rowid 

首先我创建磁盘阵列:

CREATE TABLE finalsb 
(
    tabnam newb ARRAY 
); 

然后我把数据从一个表格到阵列:

INSERT INTO finalsb VALUES(ARRAY(SELECT newb FROM newb)); 

以下语句显示'id'从表福利局:

SELECT tabnam[1].columnname FROM finalsb; 

我想要做的事,如:

Declare colvar varchar,tabvar varchar 
colvar = Select tabnam[1].columnname from finalsb; 
tabvar = Select tabnam[1].tablename from finalsb; 

我的主要目标是使用:

SELECT * FROM tabvar WHERE colvar = "somevalue"; 

谁能告诉我怎样才能申报SELECT语句作为变量?

+0

你不能'SELECT ... FROM'一个'VARCHAR'变量('tabvar')。你在这里试图做什么?你的问题不清楚。 – Nicarus

+0

我想为变量tabname [....命令中的任何值分配一个变量。 @Nicarus – nk1995coder

你必须使用select ... into variable结构:

do $$ 
declare 
    colvar varchar; 
    tabvar varchar; 
begin 
    select tabnam[1].columnname into colvar from finalsb; 
    select tabnam[1].tablename into tabvar from finalsb; 
    raise notice 'tabvar: %, colvar: %', tabvar, colvar; 
end 
$$; 

运行动态SQL PLPGSQL的execute需要:

execute format('SELECT * FROM %s WHERE %s = "somevalue"', quote_ident(tabvar), quote_ident(colvar)); 

例如在功能return语句的形式:

return query execute format('SELECT * FROM %s WHERE %s = "somevalue"', quote_ident(tabvar), quote_ident(colvar)); 

推荐阅读:

https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-

https://www.postgresql.org/docs/current/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN

dynamic sql query in postgres

+0

谢谢!这是我需要的! – nk1995coder

+0

我想执行命令:select * from tabvar where colvar = 2786683;基本上我想使用从表名Select * from tablename where columnname = 2786683.问题是我得到错误关系“tabvar”不存在。 – nk1995coder

+0

编辑答案:看一看。 –