Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Можно ли оптимизировать это? / 17 сообщений из 17, страница 1 из 1
28.02.2004, 21:40
    #32425298
lasta
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
Всем привет.
У меня есть ХП
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE PROCEDURE LOCAL_SALARYSETKTY (
    PKOD INTEGER,
    PCOL SMALLINT,
    PVALUE VARCHAR( 3 ))
AS
begin
  if (pcol= 1 ) then Update salary set k1=:pvalue where kod=:pkod;
  if (pcol= 2 ) then Update salary set k2=:pvalue where kod=:pkod;
  if (pcol= 3 ) then Update salary set k3=:pvalue where kod=:pkod;
  if (pcol= 4 ) then Update salary set k4=:pvalue where kod=:pkod;
  if (pcol= 5 ) then Update salary set k5=:pvalue where kod=:pkod;
....
  if (pcol= 31 ) then Update salary set k31=:pvalue where kod=:pkod;
end

Вопрос можо ли этот код оптимизовать и написать что-то вроде этого
Код: plaintext
1.
  Update salary set k<pcol>=:pvalue where kod=:pkod;

Я и сам пытался, но не получилось.

P.S.
Использую FireBird 1.0.3
...
Рейтинг: 0 / 0
28.02.2004, 22:02
    #32425302
srf2000
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
нельзя
P.S. с клиента update формируй и выполняй, зачем процедура?
...
Рейтинг: 0 / 0
28.02.2004, 22:04
    #32425303
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
если на дельфи то может быть так?
Код: plaintext
1.
2.
3.
4.
5.
6.
procedure update__(q:TFIBQUERY;pkod,pcol:integer;pvalue:string);
begin
q.selectsql.text:='update salary set k'+inttostr(pcol)+'=:pvalue where kod='+inttostr(pkod);
q.params[ 0 ].asstring:=pvalue;
q.open;
end;
...
Рейтинг: 0 / 0
28.02.2004, 22:26
    #32425308
lasta
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
Как с клиента я знаю)))))
Проблема в том, что это процедура вызывается не непосредствено с клиента, а из другой ХП: сперва определяю значение переменной pcol, а потом вызываю вышепреведенную ХП для внесения изменений....
...
Рейтинг: 0 / 0
28.02.2004, 23:32
    #32425318
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
если используется FireBird 1.5
то нужно использовать execute statment
сам я пока не пользовался этой фишкой, думаю должно быть что-то вроде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE PROCEDURE LOCAL_SALARYSETKTY (
    PKOD INTEGER,
    PCOL SMALLINT,
    PVALUE VARCHAR( 3 ))
AS
variable tmp_ varchar( 1000 );
begin
  tmp_= "Update salary set k" ||(cast pcol as char( 20 )|| "=:pvalue where kod=:pkod" ;
  execute statment tmp_;
end

...
Рейтинг: 0 / 0
28.02.2004, 23:33
    #32425320
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
в коде наверняка есть ошибки(сам парочку виду) так что, не обессудь, это только идея...
...
Рейтинг: 0 / 0
29.02.2004, 11:32
    #32425405
lasta
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
Ок, сейчас скачаю 1.5 и проверю.....
Спасибо
...
Рейтинг: 0 / 0
29.02.2004, 15:21
    #32425504
Roman Ignatiev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
Убил бы за такую структуру таблиц...
Это что, столбцы по дням месяца? А вы в курсе, что иногда в месяце может быть 32 дня? :)
...
Рейтинг: 0 / 0
29.02.2004, 19:24
    #32425573
lasta
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
Спасибо за лестный отзыв.....
Да это столбцы по дням месяца. Как придумал на этапе проектирования, так и спроектировал...Пока проблем нет
...
Рейтинг: 0 / 0
29.02.2004, 20:15
    #32425579
oz
oz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
2Roman Ignatiev
Я наверное не в курсе. А что за месяц такой?

процедура вызывается не непосредствено с клиента, а из другой ХП: сперва определяю значение переменной pcol, а потом вызываю вышепреведенную ХП для внесения изменений.... Какова необходимость в процедуре LOCAL_SALARYSETKTY, если во внешней ты уже определился, что и с кем ты будеш делать? Делай update там и будет тебе оптимизация.
...
Рейтинг: 0 / 0
01.03.2004, 02:29
    #32425610
lasta
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
Скачал FireBird 1.5 - вопрос отпал.
Execute statement все решает.
Я думал, может кто подскажет для версии 1.0.3......, поэтому собственно и задал вопрос.
Спасибо

для oz
я во внешней процедуре определил значение переменной pcol, и для того, что бы в ней не писать 31 однотипную строку, решил вынести этот код в отдельную процедуру...
...
Рейтинг: 0 / 0
01.03.2004, 14:14
    #32426331
Andrey_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
ozЯ наверное не в курсе. А что за месяц такой?\r
А вот такой.\r
\r
>lasta\r
Кстати о скорости "execute statment". Вы учтите что для выполнения запроса через "execute statment" сначала текст запроса компилируется, а потом выполняется. А без "execute statment" запрос компилируется при создании хранимой процедуры. Так что "execute statment" в вашем случае это конечно оптимизация кода, но через ухудшение производительности.
...
Рейтинг: 0 / 0
01.03.2004, 14:21
    #32426351
mv
mv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
Вариант:

CREATE PROCEDURE LOCAL_SALARYSETKTY (
PKOD INTEGER,
PCOL1 SMALLINT,
PCOL2 SMALLINT,
PCOL3 SMALLINT,
...
PCOL31 SMALLINT,
PVALUE VARCHAR(3))
AS
begin
Update salary set
k1=:Pcol1,
k2=:Pcol2,
..
k31=:Pcol31
where kod=:pkod;
end
-------------------

Может, переработаешь структуру базы?

Судя по всему, ты еще в процесе разработки, еще не поздно...
...
Рейтинг: 0 / 0
01.03.2004, 15:57
    #32426614
guest
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
С execute statment ты получишь просто дикеие тормоза, по сравнению с твоим if
...
Рейтинг: 0 / 0
01.03.2004, 17:09
    #32426795
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
Какие категоричные нынче гости пошли...
...
Рейтинг: 0 / 0
02.03.2004, 21:58
    #32428697
lasta
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
Я действительно нахожусь на стадии разработки, и внесение изменений в структуру базы не вызывает никаких проблем....
Подскажите, кто как хранит подобные данные (Нужно хранить данные за каждый день месяца)....

Если не так, как я уже реализовал, то, наверное, только таким образом:
=======================
| BDATE | FIO | HOURS |
=======================
| 01.03.2004 | 1 | 12 |
........


Как при таком хранении данных мне выдать сводную таблицу за месяц:

| fio | d1 | d2 | d3 |.....| d31|
...
Рейтинг: 0 / 0
03.03.2004, 09:07
    #32428916
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Можно ли оптимизировать это?
при такой организации хранения такую табличку лучше делать на клиенте.

лично я работаю со всякими веб технологиями и знаю, как сделать ее в виде html. а вот не знаю, умеют ли ее делать всякие FIB+
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Можно ли оптимизировать это? / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]