Оператор IF ELSE в снежинке

Может кто-нибудь помочь мне разобраться, почему следующий скрипт не может работать в 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;
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
50
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Как минимум, условие ЕСЛИ должно быть заключено в круглые скобки; ЕСЛИ ( ... ) 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;

Спасибо за помощь. Оно работает. Но теперь у меня есть другой вопрос: как мне сделать этот блок BEGIN встроенным в мой скрипт? Поскольку проверка схемы гарантирует, что я нахожусь в нужном месте для выполнения следующего сценария MERGE. Должно ли это выглядеть как BEGIN IF (CURRENT_DATABASE() <> 'DEV' OR CURRENT_SCHEMA() <> 'CONFIG') THEN return 'WRONG SCHEMA SELECTED'; КОНЕЦ ЕСЛИ; Оператор MERGE END;

Aiden 08.08.2024 03:12

Я предложу еще одну новую страницу для моего вопроса. Спасибо за помощь!! @Симеон

Aiden 08.08.2024 03:25

блок SNOWFLAKE SCRIPTING является действительным «блоком», если в том, что вы предлагаете после проверки, у вас есть строка, которая выполняет слияние, тогда блок можно разместить целиком и можно запустить SELECT 1;. (кроме крайних случаев CREATE TABLE AS SELECT)

Simeon Pilgrim 08.08.2024 03:43

Я попробовал добавить ; после ХОРОШО, и это сработало.

введите сюда описание изображения

Другие вопросы по теме