Вы запускаете четыре оператора IF
, но в конце у вас есть только один END IF
.
Сообщение об ошибке синтаксиса рядом с ''
указывает, что оно разобралось до конца инструкции , ожидал найти больше синтаксиса (например, балансировки END IF
для остальных вложенных IF
операторов) и не нашел его. Синтаксическая ошибка пытается дать вам контекст, показывая вам, какой текст существует в оставшейся части инструкции после ошибки, но если он достигнет конца, прежде чем он обнаружит ошибку, то для сообщения не будет следующего текста.
Вместо этого вы можете использовать оператор CASE :
DELIMITER $$
DROP FUNCTION IF EXISTS check_if_exists$$
CREATE FUNCTION check_if_exists (
object_name VARCHAR(100),
db_name VARCHAR(100),
object_type ENUM('t', 'f', 'v', 'p')
)
RETURNS INT
READS SQL DATA
BEGIN
DECLARE f_result INT DEFAULT 0;
CASE object_type
WHEN 't' THEN
SELECT COUNT(1) INTO f_result
FROM information_schema.TABLES AS t1
WHERE t1.TABLE_SCHEMA = db_name
AND t1.TABLE_NAME = object_name;
WHEN 'f' THEN
SELECT COUNT(1) INTO f_result
FROM information_schema.ROUTINES AS info
WHERE info.ROUTINE_SCHEMA = db_name
AND info.ROUTINE_TYPE = 'FUNCTION'
AND info.ROUTINE_NAME = object_name;
WHEN 'v' THEN
SELECT COUNT(1) INTO f_result
FROM information_schema.VIEWS AS t1
WHERE t1.TABLE_SCHEMA = db_name
AND t1.TABLE_NAME = object_name;
WHEN 'p' THEN
SELECT COUNT(1) INTO f_result
FROM information_schema.ROUTINES as info
WHERE info.ROUTINE_SCHEMA = db_name
AND info.ROUTINE_TYPE = 'PROCEDURE'
AND info.ROUTINE_NAME = object_name;
END CASE;
RETURN (f_result);
END$$
DELIMITER ;
. Ваш комментарий:
Я пытаюсь использовать if ... else if ... else как любой другой язык. Больше нет, если в mysql?
blockquote>Не так, как вы использовали. Нет никакой «лестницы» с неопределенным числом предложений else-if в стандартном SQL.
Но многие языки позволяют блоку else содержать другой оператор if / then / else. Таким образом, вы можете создать сложный код ветвления.
IF ... THEN /* start 1st statement */ ELSE IF ... THEN /* start 2nd statement */ ELSE IF ... THEN /* start 3rd statement */ ELSE END IF /* end 3rd statement */ END IF /* end 2nd statement */ END IF /* end 1st statement */
Языки, которые разрешают лестницы:
- Perl (
elsif
] каждый ])- Ruby (
elsif
)- PHP (
elseif
)- Python (
elif
)- BASIC (
elseif
)- PL / SQL (
elsif
)- PL / pgSQL (
elsif
)- F # (
elif
)Языки, которые не допускают лестницы, но допускают вложенные структуры управления:
- C
- C ++
- C #
- Objective-C
- Java
- Javascript
- ANSI SQL, Transact-SQL
- Pascal, Delphi
- Awk
- Scala
- Haskell
- R
- Swift
- Dart
- Go
Чтобы добавить данные в файл, вам нужно открыть файл в режиме добавления (см. fopen
):
- ' a '
Открыто только для записи; поместите указатель файла в конец файла. Если файл не существует, попробуйте его создать.- 'a +'
Открыт для чтения и записи; поместите указатель файла в конец файла. Если файл не существует, попробуйте его создать.
Итак, чтобы открыть textFile.txt в режиме добавления только записи :
fopen("textFile.txt", "a")
Но вы также можете использовать более простую функцию file_put_contents
, которая объединяет ] fopen
, fwrite
и fclose
в одной функции:
$data = sprintf("%s %s %s\n", $var1, $var2, $var3);
file_put_contents('textFile.txt', $data, FILE_APPEND);