Да, вы можете сделать это, используя JavaScript хранимые процедуры. Когда Snowflake выполняет запрос, который возвращает только сообщение о состоянии, он возвращает его в виде таблицы с одним столбцом «status» и одной строкой со статусом. Вы можете вернуть это значение. Вы можете рассмотреть, что произойдет, если возникнет ошибка SQL: обработайте ее локально в SP или сгенерируйте ошибку, чтобы вызывающий сеанс знал, что произошла ошибка. В любом случае при возвращении состояния будет отображаться сообщение об ошибке, если оно есть.
Вот пример использования JavaScript SP. У него также есть некоторые вспомогательные функции, которые я обычно использую для выполнения запросов с одним значением и операторов без запроса, просто ища возвращаемое значение:
create or replace procedure SampleSP()
returns string
language javascript
as
$$
try{
return ExecuteNonQuery("create table MY_NATION_TABLE as select * from SNOWFLAKE_SAMPLE_DATA.TPCH_SF1.NATION;");
}
catch(err){
return err;
}
// ----------------------------------------------------------------------------------
// Main function above; helper functions below
function ExecuteNonQuery(queryString) {
return ExecuteSingleValueQuery("status", queryString)
}
function ExecuteSingleValueQuery(columnName, queryString) {
var out;
cmd1 = {sqlText: queryString};
stmt = snowflake.createStatement(cmd1);
var rs;
try{
rs = stmt.execute();
rs.next();
return rs.getColumnValue(columnName);
}
catch(err) {
if (err.message.substring(0, 18) == "ResultSet is empty"){
throw "ERROR: No rows returned in query.";
} else {
throw "ERROR: " + err.message.replace(/\n/g, " ");
}
}
return out;
}
$$;
-- Run this twice to see the effect of an error. You can remove the try block
-- in the main function of the SP to generate a SQL error instead of just
-- returning a string with the error text
call SampleSP();