сделать SQL запрос сбой при условии - PullRequest
0 голосов
/ 06 мая 2020

По причине XYZ мне нужен запрос для явного сбоя (возврат кода ошибки для соединения), если выполняется какое-то условие (в Snowflake). Может кто-нибудь порекомендовать подход?

Пример псевдокода:

IF 0= ( SELECT COUNT(*) FROM XYZ) THEN FAIL

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Мне нравится подход Симеона, но вы можете захотеть создать собственное сообщение об ошибке, если оно выполняется в длинном скрипте. Сообщение об ошибке в JavaScript UDF разрешит настраиваемые (если неаккуратные) сообщения об ошибках:

create or replace function RAISE_ERROR(MESSAGE string)
returns string
language javascript
as
$$
    throw "-->" + MESSAGE + "<--";
$$;

select 
    case (select count(*) from XYZ)
        when 0 then raise_error('My custom error.')
        else 'There are rows in the table'
    end
;

Если в XYZ нет строк, появится сообщение об ошибке, которое гласит:

JavaScript ошибка выполнения: Uncaught -> My custom error <-. в RAISE_ERROR при "бросить MESSAGE;" позиция 4 stackstrace: RAISE_ERROR строка: 2 </p>

Это не самое аккуратное сообщение об ошибке, но оно позволит вам встроить собственное сообщение об ошибке, если вам нужна помощь в выявлении ошибки. Стрелки должны помочь направить людей к реальному сообщению об ошибке, брошенному в стек.

2 голосов
/ 06 мая 2020
SELECT IFF(true, 1::number, (1/0)::number);    

тогда:

IFF(TRUE, 1::NUMBER, (1/0)::NUMBER)
1

где-as

SELECT IFF(false, 1::number, (1/0)::number);    

дает:

Division by zero
...