雪花数据库:想要使用表中列的值作为另一个表的选择语句中的列名
Posted
技术标签:
【中文标题】雪花数据库:想要使用表中列的值作为另一个表的选择语句中的列名【英文标题】:Snowflake Database: Want to use value from a column in a table as a column name in select statement for another table 【发布时间】:2020-09-11 12:21:20 【问题描述】:我用的是雪花
CREATE OR REPLACE PROCEDURE test1(TBLNM varchar)
RETURNS VARCHAR(16777216) not null
LANGUAGE javascript
$$
var sql_cmd = "SELECT col1 FROM TBLNM ;
var ins = `insert into tabl2 (column1) SELECT :1
FROM table1 `
;
var stmt = snowflake.createStatement(
sqlText: sql_cmd
);
var res = stmt.execute();
while (res.next())
var column1 = res.getColumnValue(1);
ins_stmt=snowflake.execute(
sqlText: ins,
binds: [column1]
);
$$
例如,在 TBLNM 中,我有 3 行值,例如 col1
-
姓名
姓氏
等级
我在这里尝试的是,来自 TBLNM 的值“名称”应被视为表 1 的选择语句中的列名以获取值
插入表 2(列 1)从表 1 中选择名称。
这应该在表中插入人名,例如: 第 1 列
-
彼得
帕克
第 5 次
但它正在插入“名称”作为值。它将“名称”视为文本。
列 1
名称 姓 等级
请帮助我将绑定变量视为列名而不是字符串。
【问题讨论】:
【参考方案1】:您可以使用 Javascript 连接而不是绑定变量。
这对我有用:
CREATE OR REPLACE PROCEDURE test1(TBL_NAME varchar, COL_NAME varchar)
RETURNS VARCHAR(16777216) not null
LANGUAGE JAVASCRIPT
AS
$$
var stmt = snowflake.createStatement(
sqlText: `SELECT ` + COL_NAME + ` FROM ` + TBL_NAME
);
var res = stmt.execute();
while (res.next())
var column1 = res.getColumnValue(1);
var ins_stmt = snowflake.createStatement(
sqlText: `INSERT INTO table2 SELECT ` + column1 + ` FROM table1`
);
var res_ins = ins_stmt.execute();
$$;
call test1('store', 'col1');
这里也有一些例子:
https://community.snowflake.com/s/article/Snowflake-Introduces-Javascript-Stored-Procedures
问候,
【讨论】:
以上是关于雪花数据库:想要使用表中列的值作为另一个表的选择语句中的列名的主要内容,如果未能解决你的问题,请参考以下文章
MySQL:如何根据从另一个表中选择的值填充现有表的新列[关闭]
雪花我们如何遍历临时表的每一行并将其值插入到另一个表中,其中每个字段的值都是单行?