SQLite: условные выражения DDL - PullRequest
3 голосов
/ 16 ноября 2011

Я хочу выполнить следующий тип кода в sqlite3:

drop table x if (select y from z where col1 = "a");

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

Есть идеи?

Ответы [ 4 ]

1 голос
/ 16 ноября 2011

Скрипт sqlite:

.bail ON
SELECT CASE COUNT(*)
       WHEN 0       THEN 1/0  -- will throw
       ELSE 1
       END
  FROM z
 WHERE col1 = 'a';
DROP TABLE x;

Запустите его с sqlite the_database < the_script

0 голосов
/ 15 декабря 2014

SQL не дает вам способа выполнить эту функцию в виде одной строки.Самое близкое, что вы можете сделать в одной команде, это:

  1. проблема: НАЧАЛО ТРАНЗАКЦИИ
  2. выполнить запрос: ВЫБРАТЬ y ОТ ОТ ГДЕ col1 = "a"
  3. DROP TABLE x
  4. if (результат шага 2 имел> 0 строк) проблема: COMMIT else проблема: ROLLBACK
0 голосов
/ 17 ноября 2011

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

Мое решение на данный момент таково:

PSEUDOCODE:
// create temp table;
// insert conditional DDL statement(s) into temp table along with an execute column
// run condition, and if valid, set temptable's corresponding row to execute 1;
// after condition is over, run all true statements in temp table
0 голосов
/ 16 ноября 2011

Нет такого синтаксиса (см. http://www.sqlite.org/syntaxdiagrams.html#drop-table-stmt)

...