Циклы в psql (и sql*plus)
Jul. 13th, 2017 12:19 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Удивляюсь, почему в интерактивной среде? терминальном клиенте? интерпретаторе командной строки? — короче, в psql (и в sql*plus!) нет конструкций для циклов.
SQL, как и его процедурные расширения типа PL/pgSQL или PL/SQL, не могут напрямую общаться с пользователем; это правильно. А клиенты, типа psql или sql*plus, — наоборот. И действительно, оба умеют задать пользователю вопрос, узнать ответ и использовать его дальше в запросах. Но ни у одного нет даже примитивных конструкций для циклов, ну и для ветвлений. Да хоть goto какой-нибудь! Но нет.
А мне — для целей обучения — хотелось бы иметь возможность писать примитивные приложения прямо на psql, не привлекая другие языки программирования. Кто его знает, чем владеет человек (может студент, а может и школьник)? А с psql ему все равно придется разбираться. Но получается, что и скрипт написать можно, и интерактивным его сделать можно, но он всегда будет тупо линейным и никак иначе.
Короче, хочется уметь заскриптовать такой диалог:
сервер: Угадай число от 1 до 100?
человек: 42
сервер: Ни фига, 28. Играем еще?
человек: да
сервер: Угадай число от 1 до 100?
...
Или я чего-то не догоняю? Может есть какой-нибудь лайфхак?