Конференция "Базы" » можно ли сделать delay в ХП IB7.5? [IB7.5]
 
  • July (11.02.09 11:08) [0]
    Здравствуйте!
    Собственно вопрос коротко - в теме.
    Т.е. ищу возможность, подобную функции waitfor в SQL-Server.
    Нужно с целью иметь возможность подождать несколько секунд и сделать повторную попытку проверки данных и так несколько раз, прежде чем отвалить сообщение, что допустимое время ожидания истекло. Ну или,  если какая-то из попыток оказалась успешной, продолжить работу процедуры.
    Очень желательно сделать это не из приложения, а именно внутри хранимой процедуры БД.
    Возможно ли это в Interbase  в принципе?
  • Сергей М. © (11.02.09 11:21) [1]

    > попытку проверки данных


    Каких ?
    Конкретней ..
  • July (11.02.09 11:29) [2]

    > Каких ?

    Просто запросом читаю поле из обычной таблицы, если оно <>0, надо подождать, иначе - все ОК и поехали дальше
  • Сергей М. © (11.02.09 11:42) [3]

    > если оно <>0, надо подождать


    Эдак ты у моря погоды будешь ждать, до самого морковкиного заговения)
    Про уровни изоляции транзакций что-нибудь слышала ?
  • July (11.02.09 11:51) [4]
    Слышала, слышала :)
    Read commited
    правда что-то я засомневалась, правильно ли я понимала..
    я думала, что при таком уровне, если во время выполнения моей процедуры другой транзакцией данные будут изменены и сделан commit, в процедуре это станет видно, ..не правильно?
  • Сергей М. © (11.02.09 11:56) [5]

    > не правильно?


    Конечно нет)
  • Кщд (11.02.09 11:59) [6]
    >July   (11.02.09 11:51) [4]
    правильно

    а вот делать delay, скорее всего, неправильно
    но, впрочем, в Вашем посте нет информации "против" такого подхода, но нет и "за"
  • Сергей М. © (11.02.09 12:00) [7]

    > July


    Ты, похоже, таким макаром пытаешься эмулировать блокировку одновременного доступа к записи ?
  • July (11.02.09 12:01) [8]
    Тогда поправьте, если не трудно.
    Что же, даже если процедура делается в рамках транзакции с уровнем read commited, для операторов, которые внутри нее действуют другие правила?
  • Johnmen © (11.02.09 12:01) [9]

    > Сергей М. ©   (11.02.09 11:56) [5]

    Я думаю, что будет.
  • Кщд (11.02.09 12:02) [10]
    >Сергей М. ©   (11.02.09 11:56) [5]
    это какая-то уникальная фича IB7.5 - не видеть данных, подтвержденных другой транзакцией, при уровне read committed?
  • Кщд (11.02.09 12:05) [11]
    >July   (11.02.09 12:01) [8]
    никаких "других" правил
    процедура выполняется в контексте транзакции
  • July (11.02.09 12:07) [12]

    > Ты, похоже, таким макаром пытаешься эмулировать блокировку
    > одновременного доступа к записи ?

    угадали :)
    извращенский способ, да? :)
    другого в голову пока не пришло..

    Johnmen
    > Я думаю, что будет.


    Я смотрю есть разногласия по этому вопросу.
    Так или иначе, я бы с этим разобралась, если бы была возможность поэкспериментировать.
    А пока я возилась с переменными типа timestamp, пыталась манипулировать вычислениями истеrшего времени, но что-то ничего не получается..

    to Кщд - может и не понадобиться, придумается что-нибудь более умное, но это не главный вопрос в данный момент вопрос, который занимает - мне просто нужно уяснить, можно ли вообще технически сделать вручную delay внутри процедуры Interbase?
  • Сергей М. © (11.02.09 12:08) [13]

    > Конечно нет


    Да, это я ляпнул - прочитал одно, а думал про другое.


    > July


    Ответишь на [7] ?
  • Сергей М. © (11.02.09 12:11) [14]
  • Johnmen © (11.02.09 12:12) [15]

    > July   (11.02.09 12:07) [12]

    1. Если это про указанное извращение, то оно никому не нужно. Даже тебе.
    2. Задержку делаешь циклом с проверкой наперед заданного времени.
  • July (11.02.09 12:18) [16]
    на [13] см. [12]
    поясню, откуда такая идея - просто эта проверяемая запись - флаг, означающий, выполняется ли еще некая обработка над совокупностью данных, имеющая некоторое отношение к этой записи.
    Так туманно - совокупность, потому что данные по нескольким таблицам, не всегда непосредсвенно связанным, чтобы просто положиться на автоматическую проверку целостности и обработка тоже достаточно навороченная и растянутая по времени, короче говоря это все приводит к тому, что гарантий, которые дает манипулирование настройками уровнями изоляций, недостаточно, приходится раздумывать над добавлением своих таких вот извращенских методов.
    Я знаю, что это все из-за изначально заложенной в базу избыточности, эта тема отдельная, сейчас не о ней.
  • Сергей М. © (11.02.09 12:26) [17]

    > July   (11.02.09 12:18) [16]


    Почему бы тогда не обратить взов в сторону 3-хзвенки, где 2-е звено - аппсервер - могло бы, например, сериализовать сложные задания или же предоставлять для клиентов подобного рода семафорный сервис ?
  • Johnmen © (11.02.09 12:29) [18]

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

    А что, значение этого флага однозначно говорит, выполняется или нет? И кто выставляет этот флаг?
  • July (11.02.09 12:37) [19]

    > Сергей М. ©   (11.02.09 12:11) [14]

    Спасибо, почитаю

    > Johnmen ©   (11.02.09 12:12) [15]
    1. Если это про указанное извращение, то оно никому не нужно. Даже тебе.
    2. Задержку делаешь циклом с проверкой наперед заданного времени.

    Ну, я понимаю, что скорее всего правильнее без таких-вот наворотов вручную..
    Но п.2 для удовлетворения  любопытства попробую.

    Я не все еще понимаю при работе с переменными временного типа, может подскажете, почему так:
    пробовала вот этот кусок проверять по шагам:  
      t1=current_timestamp;
      t2=current_timestamp;
      dif=cast((t2-t1) as float);
     while (dif<=0.0001)
      do begin t2=current_timestamp;
      dif=cast((t2-t1) as float);
      end
    сколько бы ни проходило времени, dif всегда равно 0, не важно, с cast или без него. cast попробовала приписать уже потом
    цифра 0.0001 это где-то 10 сек.
    о математических операциях с такими типами читала здесь:
    http://plagiata.net.ru/?p=411
 
Конференция "Базы" » можно ли сделать delay в ХП IB7.5? [IB7.5]
Есть новые Нет новых   [134477   +40][b:0][p:0.001]