Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Имя таблицы как параметр запроса


Страницы:   1 2 3 4

StriderMan ©   (2006-08-02 20:19:00) 

Нужно написать хранимую процедуру, которая будет работать сразу для нескольких таблиц.

Можно ли как-то передать в запрос имя таблицы?


StriderMan   (2006-08-04 18:16:00) [1]


> sniknik ©   (04.08.06 18:08) [76]
UPDATE Unik
SET No = (SELECT No FROM Unik n WHERE n.ID<>Unik.ID AND (N.ID=1 OR N.ID=2))
WHERE ID=1 OR ID=2


че-то сомнительно что это прокатит. но попробую. на след. неделе. уже пора закругляться :)


StriderMan   (2006-08-04 18:09:00) [2]


> ANB ©   (04.08.06 18:06) [75]

есть IS NULL. в два слова.


sniknik   (2006-08-04 18:08:00) [3]

> там несколько запросов. а хотелось одним, чтоб быстрее. а одним - только ХП.
только это для MSSQL (!!!) не знаю сработает а файребирде, или нет.

тест

UPDATE Unik
SET No = (SELECT No FROM Unik n WHERE n.ID<>Unik.ID AND (N.ID=1 OR N.ID=2))
WHERE ID=1 OR ID=2

при
CREATE TABLE Unik (ID INT Identity(1, 1) PRIMARY KEY, No INT, Name VarChar(30))

CREATE UNIQUEINDEX No ON Unik (No)


думаю ясно чем заменяются 1 и 2 в реальном запросе. ;)


ANB   (2006-08-04 18:06:00) [4]


> StriderMan ©   (04.08.06 18:02) [73]

Кстати, раз уж пишешь под FB - есть ли в нем аналог NVL или IsNull, чтобы без геморроя нулловые поля сравнивать ?


ANB   (2006-08-04 18:05:00) [5]


> что за блоки?

declare
begin
 -- много операторов PL/SQL
end;


StriderMan   (2006-08-04 18:02:00) [6]


> ANB ©   (04.08.06 18:01) [72]

что за блоки?

впрочем я под FB пишу..


ANB   (2006-08-04 18:01:00) [7]


> StriderMan ©   (04.08.06 17:59) [71]

А в оракле есть безымянные блоки, в которые можно много чего написать . . .


StriderMan   (2006-08-04 17:59:00) [8]


> ANB ©   (04.08.06 17:55) [70]

там несколько запросов. а хотелось одним, чтоб быстрее. а одним - только ХП.


ANB   (2006-08-04 17:55:00) [9]


> StriderMan ©   (04.08.06 17:46) [69]

Кстати, никто не мешает такой запрос на клиенте собирать.


StriderMan   (2006-08-04 17:46:00) [10]


> stud ©   (04.08.06 17:43) [68]

да. именно так.
сейчас работает через DataSet.Edit... Что по сути и есть несколько запросов (использую IBQuery-UpdateObject). Попробую через Execute Stateмent, сравню что быстрее.


stud   (2006-08-04 17:43:00) [11]

т.е. у тебя есть просто несколько независимых таблиц - справочников, где есть эти самые коды?
тогда execute поможет конечно, но несколько запросов с клиента побыстрее будет


StriderMan   (2006-08-04 17:37:00) [12]


> то достаточно в процедуре реализовать изменение нужных полей
> во всех таблицах сразу

сразу во всех не надо! нужно в конкретной таблице провернуть такую операцию [65]. По полю КОД нет никакой связи в таблицах! в других менять не надо. фишка в том что оно уникальное!
Наиболее близкая задача - это поменять местами два элемента в массиве. такую задачу решают обычно через третью переменную. вот также и тут. коды можно поменять только через некое третье значение.

Короче от темы уже совсем отошли.


stud   (2006-08-04 17:28:00) [13]

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


StriderMan   (2006-08-04 16:35:00) [14]


> да уж)) достаточно бредовая идея, особенно для многопользовательской
> системы. вот начнет каждый под себя менять)))))

администрирование предполагается централизованное.


> ANB ©   (04.08.06 15:58) [60]
> Можешь больше тут не спорить.

А я и не спорю. Подходящий мне вариант [6].


> stud ©   (04.08.06 15:59) [61]
> вот в [26] второй пункт смущает совершенно. т.е. юзер видит
> ЧТО НА ЧТО он меняет, но если такой уже есть, то никто не
> знает на какой он изменится (в некоторое свободное значение)?
> ??

Читайте внимаетльно и до конца.

для тех кто в танке или просто не понял что нужно:
датасет:
 
 ID/код/ Имя
 111 1  Запись1
>222 2  Запись2  //текущая запись


Пользователь жмет кнопочку (-)
Получаем:


   ID/код/ Имя
>  222 1  Запись2 //текущая запись
   111 2  Запись1  


stud   (2006-08-04 16:11:00) [15]

Sergey13 ©   (04.08.06 16:07) [63]
У автора это уже не код, а поле для сортировки получается

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


Sergey13   (2006-08-04 16:07:00) [16]

> [61] stud ©   (04.08.06 15:59)

Я говорил не про коды вообще, а про меняющиеся местами коды.
У автора это уже не код, а поле для сортировки получается. А если так - пусть меняет. Мне не жалко. 8-)


stud   (2006-08-04 16:03:00) [17]

ANB ©   (04.08.06 15:58) [60]
И таких табличек, где это нужно делать - не одна, как я понял.

и связей нет..... т.е. структура на справочники не завязана....


stud   (2006-08-04 15:59:00) [18]

Sergey13 ©   (04.08.06 15:41) [57]
Кому нафиг нужны коды, которые меняются местами?

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

StriderMan ©   (04.08.06 15:44) [58]
Связей по нему и нет. А конкретная проблема при изменении кода описана тут [26], [28].

вот в [26] второй пункт смущает совершенно. т.е. юзер видит ЧТО НА ЧТО он меняет, но если такой уже есть, то никто не знает на какой он изменится (в некоторое свободное значение)???
это что-то из области "угадай мелодию" получается. по идее нельзя изменить существующий код на тот, который уже есть в системе. а если очень хочется - то пускай сначала изменят тот который есть руками.


ANB   (2006-08-04 15:58:00) [19]


> Связей по нему и нет. А конкретная проблема при изменении
> кода описана тут [26], [28].

И таких табличек, где это нужно делать - не одна, как я понял. Тогда только динамический SQL. Можешь больше тут не спорить.


StriderMan   (2006-08-04 15:49:00) [20]


> Sergey13 ©   (04.08.06 15:41) [57]
> Читаю-читаю, и все больше мне задача кажется странной. Кому
> нафиг нужны коды, которые меняются местами?!!! Сегодня карандаш
> 13-й, линейка 15-я. Завтра наоборот. Зачем?

Вобщем-то фича не особенно нужная, но кое-где используется. Дело в том что все запросы в справочники сортируются по коду, и в некоторых случаях сделано так, что берется первая запись, или записи перебираются в порядке кода. Соответственно пользователь меняя код может настроить что будет первым а что последним.


Страницы:   1 2 3 4

Наверх

Титульная страница Поиск, карта сайта Написать письмо