
    Новые сообщения [новые:0]
  
  Дайджест 
  
  Горячие темы
    Избранное [новые:0]
  
Форумы 
 
Пользователи 
Статистика 
Статистика нагрузки 
    Мод. лог 
  
  Поиск 
  | 
| 
 14.04.2020, 19:56 
 | 
|||
|---|---|---|---|
  
  | 
|||
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  Хочу поднять старую  тему . Вкратце: в базе лежат SQL DML запросы. Периодически структура базы меняется и запросы перестают выполняться. Мне нужно в определенный момент проверить валидны ли запросы или нет. Сейчас это делается вызовом UDF, которая делает этим запросам Prepare и возвращает OK или текст ошибки. Хотелось бы иметь функцию ibec_Prepare(), которая бы взяла этот функционал на себя. С уважением, Vasilisk ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 15.04.2020, 04:11 
 | 
|||
|---|---|---|---|
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  ibec_GetStatementPlan есть. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 15.04.2020, 17:29 
 | 
|||
|---|---|---|---|
  
  | 
|||
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  IBExpert ibec_GetStatementPlan есть. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 13:10 
 | 
|||
|---|---|---|---|
  
  | 
|||
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  IBExpert ibec_GetStatementPlan Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Код: sql 1. 2. 3. 4. 5. 6. Unknown error. Как бы наверное правильно, какой план от процедуры? Но изначально то хотелось функцию валидации запроса. Т.е. некий ibec_Prepare() ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 13:36 
 | 
|||
|---|---|---|---|
  
  | 
|||
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  _Vasilisk_ какой план от процедуры? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 13:38 
 | 
|||
|---|---|---|---|
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  _Vasilisk_ Он не работает для процедур И не должен. А что ты хочешь "отвалидировать" в CREATE PROCEDURE и зачем?? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 14:06 
 | 
|||
|---|---|---|---|
  
  | 
|||
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  IBExpert А что ты хочешь "отвалидировать" в CREATE PROCEDURE _Vasilisk_ Код: sql 1. 2. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 14:31 
 | 
|||
|---|---|---|---|
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  А, понятно. Ну, можно на "Unknown error" и проверять. Эта ошибка означает, что собственно prepare прошел успешно, а облом случился на запросе плана. Пока других вариантов в эксперте нет. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 14:47 
 | 
|||
|---|---|---|---|
  
  | 
|||
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  IBExpert Ну, можно на "Unknown error" и проверять И кстати, при таком коде Код: sql 1. 2. я получаю пять Unknown error. Почему скрипт не прерывается на первой? Опция Abort on error установлена IBExpert prepare прошел успешно, а облом случился на запросе плана. IBExpert Пока других вариантов в эксперте нет. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 16:12 
 | 
|||
|---|---|---|---|
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  _Vasilisk_ Этот Unknown error сыпется только при Raised = true. Т.е. нужно ловить исключение и дергать ibec_err_Message()? Если Raised = false возвращается пустая строка Дергать ibec_err_Message не нужно, потому что сообщение ошибки в случае RaiseError = true возвращается как результат. По идее, нужно просто проверить результат на пустую строку или эту самую unknown error в нем - _Vasilisk_ я получаю пять Unknown error. Почему скрипт не прерывается на первой? Баг, очевидно. Завтра проверю. _Vasilisk_ А планируется? Смотря что нужно. Если просто ошибку препарирования вернуть, если таковая случилась, то это на пять минут работы. Но это как-то слишком примитивно: prepare больше информации возвращает. Если уж делать, то возвращать, например, JSON с полным описанием результатов prepare. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 16:54 
 | 
|||
|---|---|---|---|
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  В общем, я пока сделал заготовку ibec_PrepareStatement. Она пока ничего не возвращает, только поднимает исключение. Для твоих целей этого вроде достаточно. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 17:09 
 | 
|||
|---|---|---|---|
  
  | 
|||
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  IBExpert Смотря что нужно. Если просто ошибку препарирования вернуть, если таковая случилась, то это на пять минут работы. IBExpert Баг, очевидно выполняем один раз, RaiseError = true Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Получаю 1. Result: 1: Unknown error 2. Script executed with error 3. В панели сообщений Unknown error. выполняем три раза, RaiseError = true Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Получаю 1. IBEBlock MessageResult: 1: Unknown error. 2: Cannot perform operation -- DB is not open. 3: Cannot perform operation -- DB is not open. 2. Script executed with error 3. В панели сообщенийUnknown error. Cannot perform operation -- DB is not open. Cannot perform operation -- DB is not open. выполняем три раза, RaiseError = false Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Получаю 1. IBEBlock MessageResult: 1:. 2: 3:2. Script executed successfully 3. В панели сообщений ничего ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 17:29 
 | 
|||
|---|---|---|---|
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  _Vasilisk_ Там какой-то сюрреализм В свежей версии проверяй. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 17:32 
 | 
|||
|---|---|---|---|
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  _Vasilisk_ выполняем три раза, RaiseError = false ... Получаю 1. IBEBlock MessageResult: 1:. 2: 3: 3. В панели сообщений ничего А тут что не так? Все правильно: план пустой, исключение не поднимается. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 17:58 
 | 
|||
|---|---|---|---|
  
  | 
|||
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  IBExpert А тут что не так? ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 21.04.2020, 18:04 
 | 
|||
|---|---|---|---|
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  _Vasilisk_ То, что пустая строка при Raised = false возвращается и при ошибке prepare Так и задумано. Плана же нет. A RaiseError = FALSE означает, что ошибки тебе не интересны. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 23.04.2020, 13:13 
 | 
|||
|---|---|---|---|
  
  | 
|||
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  IBExpert В свежей версии проверяй. Теперь исходный вопрос IBExpert Дергать ibec_err_Message не нужно, потому что сообщение ошибки в случае RaiseError = true возвращается как результат. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 23.04.2020, 13:30 
 | 
|||
|---|---|---|---|
  
  | 
|||
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  IBExpert В общем, я пока сделал заготовку ibec_PrepareStatement. ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
| 
 23.04.2020, 13:36 
 | 
|||
|---|---|---|---|
Отвалидировать запросы  | 
|||
| 
 #18+ 
  
    
  _Vasilisk_ При RaiseError = true я получаю исключение (что правильно), соответственно ни о каком возвращаемом результате говорить нельзя. И все-таки нужно вызвать ibec_err_Message чтобы убедиться, что у меня не Unknown error. Или я где-то не прав? А, кстати, да. Что-то я затупил. Конечно, если исключение возникло, то присваивание не выполнится. И да, тогда надо ibec_err_Message дергать: https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1324374&msg=22120021 ...  | 
|||
| 
 : 
 Нравится:
      
  Не нравится:
      
  
   | 
|||
| 
  
  
   | 
  | 

start [/forum/topic.php?fid=42&tablet=1&tid=1598651]:  | 
    0ms | 
get settings:  | 
    9ms | 
get forum list:  | 
    13ms | 
check forum access:  | 
    4ms | 
check topic access:  | 
    4ms | 
track hit:  | 
    40ms | 
get topic data:  | 
    12ms | 
get forum data:  | 
    3ms | 
get page messages:  | 
    52ms | 
get tp. blocked users:  | 
    2ms | 
| others: | 10ms | 
| total: | 149ms | 

    | 0 / 0 | 

На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даете согласие с использованием данных технологий.