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-03 15:50:00) [61]


> задача?

у двух записи в таблице взаимно поменять значение уникального поля.


Dok   (2006-08-03 14:12:00) [62]


> вобщем-то так сейчас и работает. Но для совершения операции
> нужно сделать 4! запроса. Поэтому и пришла мысль переделать
> на ХП. а в ХП просто так не передашь имя таблицы. Буду пробовать
> Execute statement

а зачем это все городить? задача?


StriderMan   (2006-08-03 14:03:00) [63]


> Dok   (03.08.06 13:56) [15]
> А вчем проблема заюзать конкатенацию строк?


вобщем-то так сейчас и работает. Но для совершения операции нужно сделать 4! запроса. Поэтому и пришла мысль переделать на ХП. а в ХП просто так не передашь имя таблицы. Буду пробовать Execute statement


Dok   (2006-08-03 13:56:00) [64]


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

А вчем проблема заюзать конкатенацию строк?

Query1.SQL.Text := 'select * from ' + TableName;
Query1.Open();

Или Format?


StriderMan   (2006-08-03 13:19:00) [65]


> Sergey13 ©   (03.08.06 13:12) [13]
> 1.ХП в таблицу не добавляют.  ХП - это отдельный объект БД.

сорри, неверно сказал. Имел ввиду ХП для каждой таблицы


Sergey13   (2006-08-03 13:12:00) [66]

> [11] StriderMan ©   (03.08.06 12:22)

1.ХП в таблицу не добавляют.  ХП - это отдельный объект БД.
2.Дело твое.


StriderMan   (2006-08-03 12:24:00) [67]


> PEAKTOP ©   (03.08.06 09:22) [9]

спасибо, попробую

> Johnmen ©   (03.08.06 09:32) [10]

посмотрю


StriderMan   (2006-08-03 12:22:00) [68]


> Sergey13 ©   (03.08.06 09:15) [8]
> ИМХО, лучше в процедуре сделать несколько веток в зависимости
> от параметра. Избавляет от постоянного разбора/перекомпиляции
> запроса сервером

Тогда проще в каждую таблицу ХП добавить.


Johnmen   (2006-08-03 09:32:00) [69]


> PEAKTOP ©   (03.08.06 09:22) [9]


В документации примеры лучше и их больше. С комментариями.


PEAKTOP   (2006-08-03 09:22:00) [70]


CREATE PROCEDUREMY_REFERENCE(
 Q_TABLE_NAME VARCHAR(31)
) RETURNS(
 ID INTEGER,
 NAME VARCHAR(100)
)
AS
  DECLARE VARIABLEP_SQL_STMT VARCHAR(255);
BEGIN
 IF
(:Q_TABLE_NAME IS NULL) THEN
    BEGIN
   SUSPEND;
   EXIT;
   END

 P_SQL_STMT = 'SELECT CAST(TB.ID AS INTEGER), TB.NAME FROM '||:Q_TABLE_NAME||' TB ';
  FOR
   EXECUTE STATEMENT
:P_SQL_STMT INTO:ID, :NAME
  DO
   SUSPEND
;
END
)


Sergey13   (2006-08-03 09:15:00) [71]

ИМХО, лучше в процедуре сделать несколько веток в зависимости от параметра. Избавляет от постоянного разбора/перекомпиляции запроса сервером.


StriderMan   (2006-08-03 09:13:00) [72]

Всем спасибо, буду пробовать


Johnmen   (2006-08-03 09:09:00) [73]

Уже сказали, execute statement. Добавлю - читать документацию...


StriderMan   (2006-08-03 08:51:00) [74]

сервер FireBird 1.5


DrPass   (2006-08-03 01:39:00) [75]


> сделать SELECT * FROM :tbl нельзя

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


Anatoly Podgoretsky   (2006-08-02 22:40:00) [76]

Динамические запросы можно делать где угодно.
А вот сделать SELECT * FROM :tbl нельзя


Megabyte   (2006-08-02 21:29:00) [77]

В MSSQL Server, например, есть такая возможность - это динамически формируемый(соответственно, с параметрами) на сервере запрос.

Все зависит от сервака!


Anatoly Podgoretsky   (2006-08-02 20:28:00) [78]

Метаданные не могут использоваться в параметрах.
Хранимые процедуры не относятся к Дельфи и они зависят от сервера.
Так что тебе на форум по серверу.


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

Наверх

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