亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在雪花的 javascript 過程中傳遞值

在雪花的 javascript 過程中傳遞值

慕的地8271018 2022-01-07 13:28:41
在 Snowflake dwh 中是否可以檢索 SQL 查詢結果并將其作為變量傳遞給同一過程中的下一個查詢?我正在嘗試嘗試 %ROWCOUNT, CURSOR case 并陷入以下困境:創建或替換過程 PASS_VAR_IN_JS()返回 VARCHAR語言 javascript  作為    $$    var command = "SELECT * FROM TABLE WHERE ATTRIBUTE = 'Value'";    var stmt = snowflake.createStatement( {sqlText: command} );    var result1 = stmt.execute();    返回結果1.getColumnName(3); //這會返回列名    var col_name = result1.getColumnName(3); //將列名保存到變量中    //將列名傳遞給查詢    var stmt = snowflake.createStatement({sqlText: "SELECT * FROM INFORMATION_SCHEMA WHERE COLUMN_NAME = ;", binds:[col_name]});    $$; UPDATE - working code that passes one result to another query<pre>CREATE OR REPLACE PROCEDURE szpotma_rowcount()RETURNS VARCHAR(250)LANGUAGE JAVASCRIPTas$$  var command = `SELECT ATTR1 FROM TABLE1 LIMIT 1`;   var stmt = snowflake.createStatement( {sqlText: command} );  var rs = stmt.execute(), col_name ;  if (rs.next()) {    col_name = rs.getColumnValue(1);    stmt = snowflake.createStatement({        sqlText: `SELECT STATUS FROM TABLE_STATUS WHERE ATTR1 = :1`, binds: [col_name]});    //view second query results    rs = stmt.execute();        rs.next()    return rs.getColumnValue(1);  }$$
查看完整描述

1 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

當然。


你可以這樣做:


  var command = `SELECT * FROM TABLE WHERE ATTRIBUTE = 'Value'`;

  var stmt = snowflake.createStatement( {sqlText: command} );

  var rs = stmt.execute(), col_name ;

  if (rs.next()) {

    col_name = rs.getColumnValue(3);


    stmt = snowflake.createStatement({

        sqlText: `SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE COLUMN_NAME = :1`, 

          binds: [col_name]

    });

  }

我列出了從結果集中提取數據的各種方法:

如何在存儲過程中使用顯示命令 - 不工作


[從上面復制]:


如果您有多個列,則代碼會變得稍微復雜一些:


  var result = [], row, col;

  while (rs.next()) {

    row = [];

    for (col = 1; col <= stmt.columnCount; col++)

      row.push(rs.getColumnValue(col));

    result.push(row);

  }

核心 JavaScript 程序員可能會將其壓縮為:


var result = [], cols = Array.from({ length: stmt.columnCount }, (v, i) => i + 1);

while (rs.next()) result.push(cols.map(c => rs.getColumnValue(c)));

最后一個變體,其中第一個結果行包含列名,隨后的行包含結果集中的數據,可通過 result[row][column] 訪問:


var result =

    [ Array.from({ length: stmt.columnCount }, (v, i) => stmt.getColumnName(i + 1)) ];

while (rs.next()) result.push(result[0].map(cn => rs.getColumnValue(cn)));


查看完整回答
反對 回復 2022-01-07
  • 1 回答
  • 0 關注
  • 157 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號