尝试在雪花中创建过程并在将值传递给另一个过程时出错

Trying to create procedure in snowflake and getting error while passing value to another procedure

下面的过程从元数据 table 中获取值并传递 它的价值进入另一个过程。

create or replace procedure get_results()
     RETURNS VARIANT
     LANGUAGE javascript
    as
    $$
    var return_value = [];
    var SQL_STMT = "select * from metad" ;
    var stmt = snowflake.createStatement(
           {
           sqlText: SQL_STMT
           }
        );
    /* Creates result set */
    var res = stmt.execute();
    while (res.next())  {
        //return_value += "\n";
        var srctbl=res.getColumnValue('SRC_TBL');
        var tgttbl=res.getColumnValue('TGT_TBL'); 
        var prc_stmt = 'CALL sync_table('+ srctbl + ',' + tgttbl+')';
        var pstmt = snowflake.createStatement({sqlText: prc_stmt});
         /* Creates result set */
        var spResult = pstmt.execute();
        if(spResult !='Success'){
        return_value=spResult;
        break;
        }
        }
            
    return return_value;
    $$
    ;
CALL get_results()       

给出错误信息:

Execution error in store procedure GET_RESULTS: SQL compilation error: error line 1 at position 16 invalid indetifier 'STBL1' At Statement.execute, line 18 position 26

我猜测您传递给存储过程 sync_table 的两个值都是字符串,而您 sql 命令 prc_stmt 将如下所示:

CALL sync_table( soruce_table_name, target_table_name );

但那是无效的SQL,应该是

CALL sync_table( 'soruce_table_name', 'target_table_name' );

这意味着您应该添加一些引号,因为这是 javascript 该字符串可以使用双引号并允许简单地插入所需的单引号:

create or replace procedure get_results()
     RETURNS VARIANT
     LANGUAGE javascript
    as
    $$
    var return_value = [];
    var SQL_STMT = "select * from metad" ;
    var stmt = snowflake.createStatement(
           {
           sqlText: SQL_STMT
           }
        );
    /* Creates result set */
    var res = stmt.execute();
    while (res.next())  {
        //return_value += "\n";
        var srctbl=res.getColumnValue('SRC_TBL');
        var tgttbl=res.getColumnValue('TGT_TBL'); 
        var prc_stmt = "CALL sync_table('"+ srctbl + "','" + tgttbl+"')";
        var pstmt = snowflake.createStatement({sqlText: prc_stmt});
         /* Creates result set */
        var spResult = pstmt.execute();
        if(spResult !='Success'){
            return_value=spResult;
            break;
        }
    }
            
    return return_value;
    $$
    ;