процедура sql проверяет входные данные перед вставкой

#sql

#sql

Вопрос:

итак, у меня есть следующий код, и я просто пытаюсь проверить входные данные перед выполнением инструкции insert, я знаю, что charat здесь был бы предпочтительным, но если возможно, я хотел бы использовать метод substr, верните сообщение об ошибке, если это не удается. Я не знаю, нужно ли мне сообщение об ошибке out или есть более простой способ сделать это. Я думаю, что это просто синтаксическая ошибка с моим оператором if. может ли кто-нибудь указать мне правильное направление? Спасибо

 CREATE PROCEDURE add_test (IN teacherid varchar, IN name varchar, IN startdate, OUT
errorMsg varchar)
BEGIN
if (SUBSTR(teacherid ,1,1) = 'm')
and(cast(SUBSTR(teacherid ,2,2) as smallint) between 0 and 50)
BEGIN
INSERT INTO test (teacherid , name , startdate) VALUES (teacherid , name , startdate);
END
  

Комментарии:

1. Эта проверка, похоже, указывает на ужасную модель данных. Не смешивайте разные типы информации в одном столбце. Если вы разбиваете это на несколько столбцов, просто примените ограничение проверки и забудьте о триггере.

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

Ответ №1:

Таким образом, вы должны выбрать сообщение об ошибке….

 CREATE PROCEDURE add_test (IN @teacherid varchar, IN @name varchar, IN @startdate datetime, OUT @errorMsg varchar)
As
BEGIN
if ((SUBSTR(teacherid ,1,1) = 'm')
and(cast(SUBSTR(teacherid ,2,2) as smallint) between 0 and 50))
BEGIN
INSERT INTO test (teacherid , name , startdate) VALUES (teacherid , name , startdate);
END
Else
BEGIN
Set @errorMsg='Error Msg Not inserted record'
Select @errorMsg
END
END
  

Комментарии:

1. привет, спасибо за это, есть какие-нибудь мысли по поводу синтаксической ошибки, ее «begin» в строке 6, которая является проблемой, поэтому я предполагаю, что я что-то пропустил в своем операторе if? Спасибо.