Может кто-нибудь помочь мне разобраться, почему следующий скрипт не может работать в Snowflake? Он сказал, что внутри есть синтаксическая ошибка. Спасибо
DECLARE
current_database STRING;
current_schema STRING;
BEGIN
current_database := CURRENT_DATABASE();
current_schema := CURRENT_SCHEMA();
IF current_database <> 'DEV' OR current_schema <> 'CONFIG' THEN
RETURN 'WRONG SCHEMA SELECTED';
ELSE RETURN 'GOOD'
END IF;
END;
Как минимум, условие ЕСЛИ должно быть заключено в круглые скобки; ЕСЛИ ( ... ) https://docs.snowflake.com/en/sql-reference/snowflake-scripting/if
Если нужны PAREN, но самое главное, что в вашем return 'good'
отсутствует точка с запятой:
DECLARE
current_database STRING;
current_schema STRING;
BEGIN
current_database := CURRENT_DATABASE();
current_schema := CURRENT_SCHEMA();
IF (current_database <> 'DEV' OR current_schema <> 'CONFIG') THEN
RETURN 'WRONG SCHEMA SELECTED';
ELSE RETURN 'GOOD';
END IF;
END;
Его также можно немного уменьшить:
BEGIN
let current_database string := CURRENT_DATABASE();
let current_schema string := CURRENT_SCHEMA();
IF (current_database <> 'DEV' OR current_schema <> 'CONFIG') THEN
return 'WRONG SCHEMA SELECTED';
END IF;
return 'GOOD';
END;
или даже:
BEGIN
IF (CURRENT_DATABASE() <> 'DEV' OR CURRENT_SCHEMA() <> 'CONFIG') THEN
return 'WRONG SCHEMA SELECTED';
END IF;
return 'GOOD';
END;
Я предложу еще одну новую страницу для моего вопроса. Спасибо за помощь!! @Симеон
блок SNOWFLAKE SCRIPTING является действительным «блоком», если в том, что вы предлагаете после проверки, у вас есть строка, которая выполняет слияние, тогда блок можно разместить целиком и можно запустить SELECT 1;
. (кроме крайних случаев CREATE TABLE AS SELECT)
Я попробовал добавить ; после ХОРОШО, и это сработало.
Спасибо за помощь. Оно работает. Но теперь у меня есть другой вопрос: как мне сделать этот блок BEGIN встроенным в мой скрипт? Поскольку проверка схемы гарантирует, что я нахожусь в нужном месте для выполнения следующего сценария MERGE. Должно ли это выглядеть как BEGIN IF (CURRENT_DATABASE() <> 'DEV' OR CURRENT_SCHEMA() <> 'CONFIG') THEN return 'WRONG SCHEMA SELECTED'; КОНЕЦ ЕСЛИ; Оператор MERGE END;