Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Вниз

Stored Proc   Найти похожие ветки 

 
Виктор ©   (2004-04-14 15:58) [0]

Подскажите пожалуста :
имеется база, в ней создана StoredProcedure изменяющая таблицы по входящим параметрам;
её выполняю праграммно посредством IBStoredProc;
для неё нужен commit или она должна это делать на автомате?


 
Виктор ©   (2004-04-14 15:58) [0]

Подскажите пожалуста :
имеется база, в ней создана StoredProcedure изменяющая таблицы по входящим параметрам;
её выполняю праграммно посредством IBStoredProc;
для неё нужен commit или она должна это делать на автомате?


 
Jack128 ©   (2004-04-14 16:21) [1]

любой sql запрос, в том числе и execute procedure, делается в рамках какой то транзакции, которую нужно закрыть, либо по коммиту, либо по rollback..


 
Jack128 ©   (2004-04-14 16:21) [1]

любой sql запрос, в том числе и execute procedure, делается в рамках какой то транзакции, которую нужно закрыть, либо по коммиту, либо по rollback..


 
bushmen ©   (2004-04-14 16:31) [2]

Зачем? транзакция делает это сама, если в коде процедуры явно не указать начало транзакции


 
bushmen ©   (2004-04-14 16:31) [2]

Зачем? транзакция делает это сама, если в коде процедуры явно не указать начало транзакции


 
Johnmen ©   (2004-04-14 16:32) [3]

...или не подтверждать/откатывать, а выполнить ещё пару-тройку execute procedure, а уж потом...
:)


 
Johnmen ©   (2004-04-14 16:32) [3]

...или не подтверждать/откатывать, а выполнить ещё пару-тройку execute procedure, а уж потом...
:)


 
Виктор ©   (2004-04-14 16:54) [4]

Вот в том то и дело что процедура лежит на серваке и логичнее
было подумать что она должна делать это сама, но
она этого не делает. Почему!


 
Виктор ©   (2004-04-14 16:54) [4]

Вот в том то и дело что процедура лежит на серваке и логичнее
было подумать что она должна делать это сама, но
она этого не делает. Почему!


 
bushmen ©   (2004-04-14 16:57) [5]

А ты код программы, которая запускает эту процедуру покажи


 
bushmen ©   (2004-04-14 16:57) [5]

А ты код программы, которая запускает эту процедуру покажи


 
Johnmen ©   (2004-04-14 17:04) [6]

>но она этого не делает.

Чего не делает ? коммит ? или роллбэк ?
:)
Вообще-то, это твоя прерогатива, а не её...


 
Johnmen ©   (2004-04-14 17:04) [6]

>но она этого не делает.

Чего не делает ? коммит ? или роллбэк ?
:)
Вообще-то, это твоя прерогатива, а не её...


 
Виктор ©   (2004-04-14 17:18) [7]

StoredProc_DEL_CONT.ParamByName ("NOTE").AsString
:=EditContDel.Descriptions.Strings[StrToInt(EditContDel.Text)];
StoredProc_DEL_CONT.ParamByName("DELALL").AsString := "T";
StoredProc_DEL_CONT.ExecProc;
Query_R_Cont.ReQuery(True);
Она не делает ни коммит ни ролбэк.
Вообщем я так понял надо самому делать коммит?


 
Виктор ©   (2004-04-14 17:18) [7]

StoredProc_DEL_CONT.ParamByName ("NOTE").AsString
:=EditContDel.Descriptions.Strings[StrToInt(EditContDel.Text)];
StoredProc_DEL_CONT.ParamByName("DELALL").AsString := "T";
StoredProc_DEL_CONT.ExecProc;
Query_R_Cont.ReQuery(True);
Она не делает ни коммит ни ролбэк.
Вообщем я так понял надо самому делать коммит?


 
Курдль ©   (2004-04-14 17:21) [8]

"Процедура на серваке" не имеет права делать Commit.
Но для хорошей работы Вашей программы вовсе не обязательно перед каждым изменением БД открывать транзакции насильно (как любят делать многие здешние аборигены). Достаточно сделать Apply датабазе (сессии) - вся цепочка выполнится автоматически.


 
Курдль ©   (2004-04-14 17:21) [8]

"Процедура на серваке" не имеет права делать Commit.
Но для хорошей работы Вашей программы вовсе не обязательно перед каждым изменением БД открывать транзакции насильно (как любят делать многие здешние аборигены). Достаточно сделать Apply датабазе (сессии) - вся цепочка выполнится автоматически.


 
Johnmen ©   (2004-04-14 17:22) [9]

>Курдль ©   (14.04.04 17:21) [8]
>Достаточно сделать Apply датабазе (сессии) - вся цепочка
>выполнится автоматически.

Это про что ?


 
Johnmen ©   (2004-04-14 17:22) [9]

>Курдль ©   (14.04.04 17:21) [8]
>Достаточно сделать Apply датабазе (сессии) - вся цепочка
>выполнится автоматически.

Это про что ?


 
Курдль ©   (2004-04-14 17:28) [10]


> Это про что ?

Прописываете вызов процедуры, например, в IBSQL.
Потом вызываете ее исполнение IBSQL.ExecSQL
Потом фиксируете все изменения IBDatabase.ApplyUpdates(IBSQL)

Что там при этом делается с транзакцияим, коммитами, роллбэками - не Ваша забота!


 
Курдль ©   (2004-04-14 17:28) [10]


> Это про что ?

Прописываете вызов процедуры, например, в IBSQL.
Потом вызываете ее исполнение IBSQL.ExecSQL
Потом фиксируете все изменения IBDatabase.ApplyUpdates(IBSQL)

Что там при этом делается с транзакцияим, коммитами, роллбэками - не Ваша забота!


 
Виктор ©   (2004-04-14 17:30) [11]

Скорее всего надо коммитить процедуру, поскольку после ее выполнения изменения видны только на той станции на которой
она выполнена, а другие этого не видят, хотя другие изменения
проходят сразу.


 
Виктор ©   (2004-04-14 17:30) [11]

Скорее всего надо коммитить процедуру, поскольку после ее выполнения изменения видны только на той станции на которой
она выполнена, а другие этого не видят, хотя другие изменения
проходят сразу.


 
Johnmen ©   (2004-04-14 17:32) [12]

>Потом фиксируете все изменения IBDatabase.ApplyUpdates(IBSQL)

Причем тут транзакции ??? При фиксировании кешированных изменений ???


 
Johnmen ©   (2004-04-14 17:32) [12]

>Потом фиксируете все изменения IBDatabase.ApplyUpdates(IBSQL)

Причем тут транзакции ??? При фиксировании кешированных изменений ???


 
Курдль ©   (2004-04-14 17:35) [13]


> Причем тут транзакции ??? При фиксировании кешированных
> изменений ???

А что есть по-Вашему "фиксирование этих самых изменений"? Это и есть последовательность операций, вызываемая командой ApplyUpdates на сервере! Здесь и  открытие транзакции и передача данных и коммит при удачной записи или роллбэк при неудачной. А Вы что думали? :)


 
Курдль ©   (2004-04-14 17:35) [13]


> Причем тут транзакции ??? При фиксировании кешированных
> изменений ???

А что есть по-Вашему "фиксирование этих самых изменений"? Это и есть последовательность операций, вызываемая командой ApplyUpdates на сервере! Здесь и  открытие транзакции и передача данных и коммит при удачной записи или роллбэк при неудачной. А Вы что думали? :)


 
Johnmen ©   (2004-04-14 17:40) [14]

>А Вы что думали? :)

А я думал, и думаю, то, что ты написал в [13], извини, бред...


 
Johnmen ©   (2004-04-14 17:40) [14]

>А Вы что думали? :)

А я думал, и думаю, то, что ты написал в [13], извини, бред...


 
Курдль ©   (2004-04-14 17:42) [15]

И что, во всех своих программах для "фиксирования кэшированных изменений" ты открываешь транзакции/закрываешь/откатываешь и т.п.?!!


 
Курдль ©   (2004-04-14 17:42) [15]

И что, во всех своих программах для "фиксирования кэшированных изменений" ты открываешь транзакции/закрываешь/откатываешь и т.п.?!!


 
Johnmen ©   (2004-04-14 17:47) [16]

Ну, во-первых, не во всех "своих программах" я пользуюсь кешированием.
Во-вторых, транзакциями я управляю сам, и это абсолютно не зависит от наличия/отсутствия кеширования НД.
И в-третьих, методы ApplyUpdates никогда не приводят к неявному коммиту...


 
Johnmen ©   (2004-04-14 17:47) [16]

Ну, во-первых, не во всех "своих программах" я пользуюсь кешированием.
Во-вторых, транзакциями я управляю сам, и это абсолютно не зависит от наличия/отсутствия кеширования НД.
И в-третьих, методы ApplyUpdates никогда не приводят к неявному коммиту...


 
Курдль ©   (2004-04-14 17:53) [17]


> методы ApplyUpdates никогда не приводят к неявному коммиту...

Ну, поразмыслите логически - к чему они приводят? К записи данных в БД (если все Ок) или откату (если что-то не так). А на стороне сервера это никак, иначе чем коммитом не достичь!
Можете для чистоты экскремента запустить на локальном компе какой-нить Iris и отследить траффик клиент-сервер.


 
Курдль ©   (2004-04-14 17:53) [17]


> методы ApplyUpdates никогда не приводят к неявному коммиту...

Ну, поразмыслите логически - к чему они приводят? К записи данных в БД (если все Ок) или откату (если что-то не так). А на стороне сервера это никак, иначе чем коммитом не достичь!
Можете для чистоты экскремента запустить на локальном компе какой-нить Iris и отследить траффик клиент-сервер.


 
Vlad ©   (2004-04-14 17:53) [18]


> Johnmen ©   (14.04.04 17:47) [16]

Я извиняюсь, но в методе TIBDatabase.ApplyUpdates
стоит TR.CommitRetaining (TR - транзакция )


 
Vlad ©   (2004-04-14 17:53) [18]


> Johnmen ©   (14.04.04 17:47) [16]

Я извиняюсь, но в методе TIBDatabase.ApplyUpdates
стоит TR.CommitRetaining (TR - транзакция )


 
Johnmen ©   (2004-04-14 18:13) [19]

>Vlad ©   (14.04.04 17:53) [18]

Ну что тут сказать... Это глупость (?) Джеффа О.
Поскольку происходит смешение понятий механизма кеширования и транзакционного механизма. А это как сравнивать мыльную пену с ракеткой для тенниса...:)
Впрочем, про отца IBX и его детище много написано...
Отстой, короче. По кр.мере с моей т.з.


 
Johnmen ©   (2004-04-14 18:13) [19]

>Vlad ©   (14.04.04 17:53) [18]

Ну что тут сказать... Это глупость (?) Джеффа О.
Поскольку происходит смешение понятий механизма кеширования и транзакционного механизма. А это как сравнивать мыльную пену с ракеткой для тенниса...:)
Впрочем, про отца IBX и его детище много написано...
Отстой, короче. По кр.мере с моей т.з.


 
Vlad ©   (2004-04-14 18:17) [20]


> Johnmen ©   (14.04.04 18:13) [19]

Согласен, тем более что коммит производится независимо от состояния проперти CachedUpdates


 
Vlad ©   (2004-04-14 18:17) [20]


> Johnmen ©   (14.04.04 18:13) [19]

Согласен, тем более что коммит производится независимо от состояния проперти CachedUpdates


 
Johnmen ©   (2004-04-14 18:19) [21]

Что интересно, что в FIB+ тоже решили, что метод ApplyUpdates объекта T..Database подразумевает подтверждение тр-ии :)
А это значит, что смысл в этот метод вкладывается не тот, что в случае для НД...
Вот же ...


 
Johnmen ©   (2004-04-14 18:19) [21]

Что интересно, что в FIB+ тоже решили, что метод ApplyUpdates объекта T..Database подразумевает подтверждение тр-ии :)
А это значит, что смысл в этот метод вкладывается не тот, что в случае для НД...
Вот же ...


 
Соловьев ©   (2004-04-14 18:22) [22]


> Johnmen ©   (14.04.04 18:13) [19]
> >Vlad ©   (14.04.04 17:53) [18]
>
> Ну что тут сказать... Это глупость (?) Джеффа О.
> Поскольку происходит смешение понятий механизма кеширования
> и транзакционного механизма. А это как сравнивать мыльную
> пену с ракеткой для тенниса...:)
> Впрочем, про отца IBX и его детище много написано...
> Отстой, короче. По кр.мере с моей т.з.

У меня есть несколько клиентов под IBX - работает уже более 2-х лет. За это время только функциональность подтягивал(сейчас пишу на плюсах)... Все конечно завистит от решаемых задач, но ИМХО и с IBX можно нормально жить...


 
Соловьев ©   (2004-04-14 18:22) [22]


> Johnmen ©   (14.04.04 18:13) [19]
> >Vlad ©   (14.04.04 17:53) [18]
>
> Ну что тут сказать... Это глупость (?) Джеффа О.
> Поскольку происходит смешение понятий механизма кеширования
> и транзакционного механизма. А это как сравнивать мыльную
> пену с ракеткой для тенниса...:)
> Впрочем, про отца IBX и его детище много написано...
> Отстой, короче. По кр.мере с моей т.з.

У меня есть несколько клиентов под IBX - работает уже более 2-х лет. За это время только функциональность подтягивал(сейчас пишу на плюсах)... Все конечно завистит от решаемых задач, но ИМХО и с IBX можно нормально жить...


 
Vlad ©   (2004-04-14 18:25) [23]


> Соловьев ©   (14.04.04 18:22) [22]

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


 
Vlad ©   (2004-04-14 18:25) [23]


> Соловьев ©   (14.04.04 18:22) [22]

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


 
Соловьев ©   (2004-04-14 18:30) [24]


> Vlad ©   (14.04.04 18:25) [23]

Я говорил не про кешированные изменения а про то что IBX не такой уже и отстой.


 
Соловьев ©   (2004-04-14 18:30) [24]


> Vlad ©   (14.04.04 18:25) [23]

Я говорил не про кешированные изменения а про то что IBX не такой уже и отстой.


 
Johnmen ©   (2004-04-14 18:30) [25]

>Соловьев ©   (14.04.04 18:22) [22]

Про это не спорю. У самого есть на IBX долгоживущие, в смысле играющие, проекты.
Суть то вот в этом  [21] и [23]
:)


 
Johnmen ©   (2004-04-14 18:30) [25]

>Соловьев ©   (14.04.04 18:22) [22]

Про это не спорю. У самого есть на IBX долгоживущие, в смысле играющие, проекты.
Суть то вот в этом  [21] и [23]
:)


 
Соловьев ©   (2004-04-14 18:32) [26]


> Johnmen ©   (14.04.04 18:30) [25]

Да. Тут автор поста не до конца понял зачем эти кешированные изменения придумали... Я согласен с вами :)


 
Соловьев ©   (2004-04-14 18:32) [26]


> Johnmen ©   (14.04.04 18:30) [25]

Да. Тут автор поста не до конца понял зачем эти кешированные изменения придумали... Я согласен с вами :)


 
Vlad ©   (2004-04-14 18:41) [27]


> Соловьев ©   (14.04.04 18:32) [26]

По-моему автору эти кэшированные изменения вобще до лампочки :-)
Ему надо знать - нужен явный коммит или не нужен


 
Vlad ©   (2004-04-14 18:41) [27]


> Соловьев ©   (14.04.04 18:32) [26]

По-моему автору эти кэшированные изменения вобще до лампочки :-)
Ему надо знать - нужен явный коммит или не нужен


 
Dimk   (2004-04-14 19:26) [28]

А вот что я нашел в настройках драйвера Interbase.
SHARED AUTOCOMMIT Passthrough SQL and non-passthrough SQL share the same connection, and passthrough SQL behaves in a similar fashion to non-passthrough. This means that, as long as the user is not in an explicit client transaction or batch mode, passthrough SQL statements are automatically committed.


 
Dimk   (2004-04-14 19:26) [28]

А вот что я нашел в настройках драйвера Interbase.
SHARED AUTOCOMMIT Passthrough SQL and non-passthrough SQL share the same connection, and passthrough SQL behaves in a similar fashion to non-passthrough. This means that, as long as the user is not in an explicit client transaction or batch mode, passthrough SQL statements are automatically committed.


 
Vlad ©   (2004-04-14 19:29) [29]


> Dimk   (14.04.04 19:26) [28]

Это для ODBC драйвера чтоли? Так о нем тут речи нет.


 
Vlad ©   (2004-04-14 19:29) [29]


> Dimk   (14.04.04 19:26) [28]

Это для ODBC драйвера чтоли? Так о нем тут речи нет.


 
Курдль ©   (2004-04-14 19:31) [30]

Я тут вспылил немного, смешав в кучу столько всякого - и кэшированныеп изменения и транзакции.
Я хотел сказать одно(точнее повторить), что нет нужды открывать, закрывать, откатывать транзакции при простых операциях.
Например при кэшированных изменениях в 3-х связанных ДатаСэтах достаточно сделать DataBase.ApplyUpdate([DataSet1, DataSet2, DataSet3]); чтобы все само собой разрулилось.
А при исполнении одиночной процедуры при помощи ...ExecProc или ...Query вообще достаточно просто вызвать их метод ExecSQL.


 
Курдль ©   (2004-04-14 19:31) [30]

Я тут вспылил немного, смешав в кучу столько всякого - и кэшированныеп изменения и транзакции.
Я хотел сказать одно(точнее повторить), что нет нужды открывать, закрывать, откатывать транзакции при простых операциях.
Например при кэшированных изменениях в 3-х связанных ДатаСэтах достаточно сделать DataBase.ApplyUpdate([DataSet1, DataSet2, DataSet3]); чтобы все само собой разрулилось.
А при исполнении одиночной процедуры при помощи ...ExecProc или ...Query вообще достаточно просто вызвать их метод ExecSQL.


 
Vlad ©   (2004-04-14 19:42) [31]


> Курдль ©   (14.04.04 19:31) [30]


> Например при кэшированных изменениях в 3-х связанных ДатаСэтах
> достаточно сделать DataBase.ApplyUpdate([DataSet1, DataSet2,
> DataSet3]); чтобы все само собой разрулилось.

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


 
Vlad ©   (2004-04-14 19:42) [31]


> Курдль ©   (14.04.04 19:31) [30]


> Например при кэшированных изменениях в 3-х связанных ДатаСэтах
> достаточно сделать DataBase.ApplyUpdate([DataSet1, DataSet2,
> DataSet3]); чтобы все само собой разрулилось.

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


 
Dimk   (2004-04-14 19:45) [32]

Почему же ODBC? Сходите в BDEAdministrator...
Drivers->Native->Interbase
Или тут используются компонеты которые работают без BDE?


 
Dimk   (2004-04-14 19:45) [32]

Почему же ODBC? Сходите в BDEAdministrator...
Drivers->Native->Interbase
Или тут используются компонеты которые работают без BDE?


 
Vlad ©   (2004-04-14 19:47) [33]


> Dimk   (14.04.04 19:45) [32]

Если ты внимательно читал, тут речь о компонентах IBX, то есть БДЕ тут как бы вобще не причем.


 
Vlad ©   (2004-04-14 19:47) [33]


> Dimk   (14.04.04 19:45) [32]

Если ты внимательно читал, тут речь о компонентах IBX, то есть БДЕ тут как бы вобще не причем.


 
Dimk   (2004-04-14 19:50) [34]

Sorry. Честно признаюсь - не писал под Interbase :o)
Но я бы сделал коммит в процедуре.


 
Dimk   (2004-04-14 19:50) [34]

Sorry. Честно признаюсь - не писал под Interbase :o)
Но я бы сделал коммит в процедуре.


 
Fay ©   (2004-04-14 19:55) [35]

Если бы была такая возможность...


 
Fay ©   (2004-04-14 19:55) [35]

Если бы была такая возможность...


 
Курдль ©   (2004-04-14 22:49) [36]


> Dimk   (14.04.04 19:50) [34]
> Но я бы сделал коммит в процедуре.

Что, прямо в теле процедуры на сервере?
И что делать, если все-таки понадобится открыть длинную транзакцию для цепочки процедур(инсёртов, апдэйтов ...), в которой эта процедура окажется предпоследней, а последняя вывалит ошибку?


 
Курдль ©   (2004-04-14 22:49) [36]


> Dimk   (14.04.04 19:50) [34]
> Но я бы сделал коммит в процедуре.

Что, прямо в теле процедуры на сервере?
И что делать, если все-таки понадобится открыть длинную транзакцию для цепочки процедур(инсёртов, апдэйтов ...), в которой эта процедура окажется предпоследней, а последняя вывалит ошибку?


 
Dimk   (2004-04-15 10:41) [37]

2 Курдль ©   (14.04.04 22:49) [36]
Ну тогда Ваше ApplayUpdates...
или если комуто не верится что лампочка в холодильнике
гаснет когда закрывается дверь -
сделать чтото типа Query.SQL.Text :=
begin
commit;
end (не помню надо ли тут запятую ставить в данном случае)
и Query.ExecSQL;
:o)


 
Dimk   (2004-04-15 10:41) [37]

2 Курдль ©   (14.04.04 22:49) [36]
Ну тогда Ваше ApplayUpdates...
или если комуто не верится что лампочка в холодильнике
гаснет когда закрывается дверь -
сделать чтото типа Query.SQL.Text :=
begin
commit;
end (не помню надо ли тут запятую ставить в данном случае)
и Query.ExecSQL;
:o)


 
Johnmen ©   (2004-04-15 11:08) [38]

>Dimk

Уважаемый, не надо дискутировать, если не владеете предметом дискуссии.


 
Johnmen ©   (2004-04-15 11:08) [38]

>Dimk

Уважаемый, не надо дискутировать, если не владеете предметом дискуссии.


 
Vlad ©   (2004-04-15 11:10) [39]


> Dimk   (15.04.04 10:41) [37]

Это по-моему из Оракла ;-)


 
Vlad ©   (2004-04-15 11:10) [39]


> Dimk   (15.04.04 10:41) [37]

Это по-моему из Оракла ;-)


 
Курдль ©   (2004-04-15 11:12) [40]


> Это по-моему из Оракла ;-)

Оракл чё, дурнее интербэйса? :)
Он тоже все коммиты/роллбэки решает на самом низшем уровне.


 
Курдль ©   (2004-04-15 11:12) [40]


> Это по-моему из Оракла ;-)

Оракл чё, дурнее интербэйса? :)
Он тоже все коммиты/роллбэки решает на самом низшем уровне.



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.65 MB
Время: 0.038 c
8-1076420291
Larry
2004-02-10 16:38
2004.05.09
Поиск координаты точки


1-1082210213
alsov1234
2004-04-17 17:56
2004.05.09
Медленный скролинг в гриде


7-1080381695
Alt-Ctrl-Del
2004-03-27 13:01
2004.05.09
Закрыть приложение (Очень Нужно)


3-1081428440
Mishenka
2004-04-08 16:47
2004.05.09
Поле типа Memo?


6-1079674456
Itsme
2004-03-19 08:34
2004.05.09
Сообщение по MSOutLook с вложенными файлами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский