Вставка параметров хранимой процедуры в таблицу с помощью слияния в snowflake

#javascript #sql #stored-procedures #snowflake-cloud-data-platform

#javascript #sql #хранимые процедуры #snowflake-cloud-data-platform

Вопрос:

Я пытаюсь вставить значения параметров хранимой процедуры в таблицу, используя функцию слияния в sql. Параметры состоят из базы данных и имени схемы. Я написал хранимую процедуру для этого, но я не понимаю, где я делаю неправильно. Вот моя попытка:

 CREATE TABLE TABL(DBName VARCHAR, SCName VARCHAR) // creating table

REATE OR REPLACE PROCEDURE repo(DB VARCHAR,SC VARCHAR) //need to push DB, SC INTO TABL
    RETURNS type
    LANGUAGE JAVASCRIPT
    AS
    $$      
       //Inserting parameters into table as values but didn;t work  
        var sql_command = "merge TABL as t using (SELECT  "DB"  as database, "SC"  as schema) as s on t.DBName = s.DB and t.SCName = s.schema when matched then update set t.DBName = t.DBName when not matched then insert (DBName, SCName) VALUES ('" DB "','" SC  "')";
        snowflake.execute({sqlText: sql_command});

    return type;
    $$;
  

Ответ №1:

Вы можете использовать привязки:

 CREATE TABLE TABL(DBName VARCHAR, SCName VARCHAR); // creating table

CREATE OR REPLACE PROCEDURE repo(DB VARCHAR,SC VARCHAR) 
    RETURNS string
    LANGUAGE JAVASCRIPT
    AS
    $$      
        var sql_command = `merge into TABL as t 
                            using (SELECT :1 as database,:2  as schema) as s 
                            on t.DBName = s.database 
                            and t.SCName = s.schema 
                            when matched then update 
                            set t.DBName = t.DBName 
                            when not matched then insert 
                            (DBName, SCName) VALUES (:1,:2)`;
        snowflake.execute({sqlText: sql_command, binds: [DB, SC]});

    return 'success';
    $$;
    
    call repo('a', 'b');
  

Смотрите https://docs.snowflake.com/en/sql-reference/stored-procedures-usage.html#binding-variables для получения дополнительной информации.

Комментарии:

1. помогло мне передать параметр вниз по течению через временную таблицу; используя это . Спасибо. Голос ЗА.

2. когда я попытался связать имя таблицы с обозначением: 1 в команде sql и списком в переменной bind, я получаю ошибку