Есть ли способ поместить комментарии в файлы Snow SQL, которые не вызывают ошибок? - PullRequest
0 голосов
/ 26 марта 2020

Я использую файлы со снегом sql для автоматизации определенных процессов. Для обслуживания я хочу включить комментарии в файл (используя // в начале строки), чтобы объяснить ключевые шаги. Однако, когда я делаю этот снег, sql сообщает об ошибке: 000900 (42601): SQL Ошибка компиляции: пустое выражение SQL.

, например:

select 'hello world';
// and now exit the session
!exit

вызовет ошибку:

$ snowsql --filename comments.sql
* SnowSQL * v1.2.5approval |                     
Type SQL statements or !help                     
+---------------+                                
| 'HELLO WORLD' |                                
|---------------|                                
| hello world   |                                
+---------------+                                
1 Row(s) produced. Time Elapsed: 0.209s          
000900 (42601): SQL compilation error:           
Empty SQL statement.                             
Goodbye!                                         

Если я удалю комментарии и оставлю вместо этого пустые строки:

select 'hello world';

!exit

Тогда это будет работать без сообщений об ошибках

$ snowsql --filename no-comments.sql
* SnowSQL * v1.2.5approval |
Type SQL statements or !help
+---------------+
| 'HELLO WORLD' |
|---------------|
| hello world   |
+---------------+
1 Row(s) produced. Time Elapsed: 1.088s

Goodbye!

Это происходит со снегом sql версия 1.2.5

Есть ли способ включить комментарии в файл sql, который не вызывает ошибок в снегу sql?

Ответы [ 3 ]

0 голосов
/ 26 марта 2020

Вы можете использовать стандартные SQL маркеры комментариев, двойные черточки. Я протестировал его, и он работает:

select 'hello world';
-- and now exit the session
!exit

Я думаю, что если он работает в веб-интерфейсе, он должен работать так же в Snow SQL, поэтому я открою билет, чтобы проверить это.

0 голосов
/ 21 апреля 2020

Не уверен, что есть проблема ... хотя !exit может быть проблемой. Во-первых, еще один пример:

Мой тест с комментариями. sql:

select 'hello Grovers Corner';

-- this is a double dash comment

select 'hello Indiana'
-- dashes in middle of sql statement
from information_schema.tables
fetch 1 row only;

select 'hello United States'
// slashes in middle of sql statement
from information_schema.tables
fetch 1 row only;

// some final slashes on the last line

... обратите внимание, что нет !exit в конце скрипт

... и выполнение snow sql с результатами:

$ snowsql -f comments.sql -o echo=True
* SnowSQL * v1.1.86
Type SQL statements or !help
select 'hello Grovers Corner';
+------------------------+
| 'HELLO GROVERS CORNER' |
|------------------------|
| hello Grovers Corner   |
+------------------------+
1 Row(s) produced. Time Elapsed: 0.085s
-- this is a double dash comment

select 'hello Indiana'
-- dashes in middle of sql statement
from information_schema.tables
fetch 1 row only;
+-----------------+
| 'HELLO INDIANA' |
|-----------------|
| hello Indiana   |
+-----------------+
1 Row(s) produced. Time Elapsed: 1.803s
select 'hello United States'
// slashes in middle of sql statement
from information_schema.tables
fetch 1 row only;
+-----------------------+
| 'HELLO UNITED STATES' |
|-----------------------|
| hello United States   |
+-----------------------+
1 Row(s) produced. Time Elapsed: 1.748s
// some final slashes on the last line
000900 (42601): SQL compilation error:
Empty SQL statement.
Goodbye!
$

Итак, двойная косая черта не повлияла на оператор sql, но они путают конец сценарий!

Наконец, я заменил двойные косые черты в последней строке двойными черточками, и произошла нет SQL ошибка компиляции. И те же результаты без опции echo = True на этапе выполнения командной строки.

Я думаю, что это связано с моим собственным вопросом о явной невозможности НЕ завершать работу сценария при вызове из командной строки snow sql , (Смотрите ТАК вопрос логин. sql и НЕ выход )

0 голосов
/ 26 марта 2020

Похоже, проблема в том, что он обрабатывает текст комментария как оператор sql. Несмотря на то, что он правильно находит, что это просто комментарий, он пытается выполнить и не находит фактический скрипт. Следовательно, «Пустой SQL оператор».

В качестве обходного пути Вы должны просто поставить комментарий перед точкой с запятой, чтобы он понимал, что должен выполняться только один скрипт.

Вы можно также поставить манекен select 1 или что-то подобное.

select 'hello world'
// and now exit the session
;

!exit
...