Tengo un procedimiento de copo de nieve que crea una tabla usando los parámetros pasados a un procedimiento de copo de nieve como se muestra a continuación:
CREATE OR REPLACE PROCEDURE SP_test (c_names varchar) RETURNS STRING LANGUAGE JAVASCRIPT AS $$ var results_array = []; var c_names_combined = "'" + C_NAMES.split(',').join("','") + "'" sql_command = `SELECT TABLE_CATALOG||'.'||TABLE_SCHEMA||'.'||TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='MAP_MEMBER_PLATFORM'` sql_command = sql_command + ` AND TABLE_SCHEMA IN (` + c_names_combined +`)` sqlStmt = snowflake.createStatement( {sqlText: sql_command} ); result_sqlStmt = sqlStmt.execute(); while (result_sqlStmt.next()) { var full_table_names = result_sqlStmt.getColumnValue(1); results_array.push([full_table_names]); } var c_1 = results_array[0]; var c_2 = results_array[1]; var c_3 = results_array[2]; sql_command = `CREATE OR REPLACE TABLE table_to_create AS SELECT * FROM ` + c_1 +` UNION ALL SELECT * FROM ` + c_2 +` UNION ALL SELECT * FROM ` + c_3 +`` sqlStmt = snowflake.createStatement( {sqlText: sql_command} ); result_sqlStmt = sqlStmt.execute(); result = "done" return result $$ ; call SP_test('A,B,C');El código funciona bien si paso tres parámetros A, B y C. Pero quiero que funcione para tantos parámetros como pase.
Por ejemplo, si llamo al procedimiento con parámetros ('A, B, C, D, E'). Quiero que mi tabla (table_to_create) cree una tabla usando los parámetros que he pasado (en este caso: A, B, C, D, E)
Por favor ayuda !
Algo como esto debería funcionar, puede que no sea lo ideal, pero debería funcionar:
var results_array = [1, 2, 3, 4, 5]; var sql_command="CREATE OR REPLACE TABLE table_to_create AS "; for (let i = 0; i < results_array.length; i++) { sql_command += "SELECT * FROM " + results_array[i] + " UNION ALL "; } var last_words = sql_command.split(" ") last_words.pop(); last_words.pop(); last_words.pop(); var sql_command_new = last_words.join(" ");Ejecutando esto en la consola del nodo obtengo:
> console.log(sql_command_new); CREATE OR REPLACE TABLE table_to_create AS SELECT * FROM 1 UNION ALL SELECT * FROM 2 UNION ALL SELECT * FROM 3 UNION ALL SELECT * FROM 4 UNION ALL SELECT * FROM 5Se necesitan los 3 pop para eliminar el último espacio y el último UNION ALL. De esta manera, puede agregar tantos argumentos como necesite.