【问题标题】: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

  1. 姓名
  2. 姓氏
  3. 等级

我在这里尝试的是,来自 TBLNM 的值“名称”应被视为表 1 的选择语句中的列名以获取值

插入表 2(列 1)从表 1 中选择名称。

这应该在表中插入人名,例如: 第 1 列

  1. 彼得
  2. 帕克
  3. 第 5 次

但它正在插入“名称”作为值。它将“名称”视为文本。

列 1

名称 姓 等级

请帮助我将绑定变量视为列名而不是字符串。

【问题讨论】:

    标签: snowflake-cloud-data-platform


    【解决方案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

    问候,

    【讨论】:

      猜你喜欢
      • 2021-08-01
      • 1970-01-01
      • 2020-03-09
      • 2020-06-25
      • 2020-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      相关资源
      最近更新 更多