powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB3 не работает as cursor
20 сообщений из 20, страница 1 из 1
FB3 не работает as cursor
    #39514945
NatNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужна помощь. Я не могу понять где ошибка. В 2.5 все работало, поставили 3 - появилась ошибка, хотя я ошибки не вижу:

Код: sql
1.
2.
3.
4.
5.
6.
for Select right(t.psi_name,2) from obj t where ((t.id_vida_ob=:id_vida) and (char_length(t.psi_name)=8)) into :PSI_NAME_OBJ AS CURSOR TCUR do
    begin

      if (:name is not null) then
        update obj set name_obj=:name where current of TCUR;    
    end



--------------------------------------------------------------------------------------------------------------
can't format message 13:896 -- message file C:\Windows\SysWOW64\firebird.msg not found.
unsuccessful metadata update.
CREATE OR ALTER PROCEDURE NORMAL_NAME_KS failed.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
no column name specified for column number 1 in derived table <Missing arg #2 - possibly status vector overflow>.
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39514961
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте "for Select right(t.psi_name,2) col1... "

P.S. А AS CURSOR обязателен ?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39514982
NatNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полный текст:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
SET TERM ^ ;

create or alter procedure NORMAL_NAME_KS
as
declare variable ID_VIDA integer;
declare variable PSI_NAME_OBJ varchar(2);
declare variable NAME varchar(100);
BEGIN
  select id_vida_ob from vid_obj where name_vida_obj like 'КС%' into :id_vida;
  for Select right(t.psi_name,2) from obj t where ((t.id_vida_ob=:id_vida) and (char_length(t.psi_name)=8)) into :PSI_NAME_OBJ AS CURSOR TCUR do
    begin
      NAME=(case
        when :PSI_NAME_OBJ='03' then 'КС VVV1'
        when :PSI_NAME_OBJ='0S' then 'КС SSSX'
        ...
        when :PSI_NAME_OBJ='49' then 'КС BBBS'
        else null end);
      if (:name is not null) then
        update obj set name_obj=:name where current of TCUR;
    end
END
^

SET TERM ; ^



Поэтому cols думаю тут не поможет... или уточните Рустам Вашу мысль
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39514984
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NatNV,

я не понял, зачем тут вообще курсор.
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39514987
NatNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Покажите, как обойтись без курсора?
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515005
NatNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kdv,

я тоже хотел бы одним update без всякого перебора изменить поле, но не додумался как и примеров таких не нашел. Если научите буду очень Вам благодарен.
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515011
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
алиасы должны быть для всех полей (которые выражения) курсора
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515018
NatNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не понял замечания, если честно - поясните насчет альясов...
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515035
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рустам выше уже написал - select right(...) as col1 и т.п.
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515038
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NatNV> Поэтому cols думаю тут не поможет... или уточните Рустам Вашу мысль

"cols" - это алиасы для полей (ещё для таблиц их указывают).
Я же написал "for Select right(t.psi_name,2) добавьте сюда col1 ..."
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515040
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515054
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что касается обойтись одним update - так он поддерживает весь
функционал where и case. Т.е. в Вашем случае что-то вроде

Код: sql
1.
2.
3.
4.
5.
6.
update obj set name_obj = (case 
when :PSI_NAME_OBJ='03' then 'EN VVV1'
when :PSI_NAME_OBJ='0S' then 'EN SSSX'
...
when :PSI_NAME_OBJ='49' then 'EN BBBS'
end);



Кстати, case поддерживает "упрощенную форму":

Код: sql
1.
2.
3.
4.
5.
6.
update obj set name_obj = (case 
when :PSI_NAME_OBJ='03' then 'EN VVV1'
when :PSI_NAME_OBJ='0S' then 'EN SSSX'
...
when :PSI_NAME_OBJ='49' then 'EN BBBS'
end);



P.S. Ну и последнее - а для чего нужно пожобное извращение?
CASE на 49 строк - не факт, что лучшее решение. Лучше используйте
таблицу подстановок (это работает медленнее, но гораздо удобнее).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515056
NatNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я уже понял. я их постоянно использую сам, но почему-то не сразу понял...)) Утро наверное. Заработало:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select id_vida_ob from vid_obj where name_vida_obj like 'КС%' into :id_vida;
  for Select right(t.psi_name,2) as col1 from obj t where ((t.id_vida_ob=:id_vida) and (char_length(t.psi_name)=8)) AS CURSOR TCUR do
    begin
      NAME=(case
        when TCUR.col1='03' then then 'КС VVV1'
        when TCUR.col1='0S' then 'КС SSSX'
        ...
        else null end);
      if (:name is not null) then
        update obj set name_obj=:name where current of TCUR;
    end



Спасибо всем огромное... Буду немного умнее ))
Модератор: Пользуйся тегом SRC
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515058
NatNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

Спасибо большое!!! Так конечно лучше. Теперь буду пользоваться таким видом запроса ))
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515060
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Кстати, case поддерживает "упрощенную форму":
>
>
> update obj set name_obj = (case
> when :PSI_NAME_OBJ='03' then 'EN VVV1'
> when :PSI_NAME_OBJ='0S' then 'EN SSSX'
> ...
> when :PSI_NAME_OBJ='49' then 'EN BBBS'
> end);
>

Сорри, мискликнул

Код: sql
1.
2.
3.
4.
5.
6.
update obj set name_obj = (case :PSI_NAME_OBJ
when '03' then 'EN VVV1'
when '0S' then 'EN SSSX'
...
when '49' then 'EN BBBS'
end);


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515063
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NatNV> Так конечно лучше. Теперь буду пользоваться таким видом запроса ))

На здоровье. Укороченный вариант, конечно, лучше, но таки
лучше подумайте о более человеческом решении, без case. :-)
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515078
NatNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, теперь обошелся и без курсора !!! Не знал что update поддерживает "упрощенную форму"
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515080
NatNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гаджимурадов Рустам,

без case, - таблицы подстановки - наверное решение не плохое. подумаю над этим.
Спасибо еще раз !!! Вы помогая делаете правильное дело :)
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515268
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NatNV> Не знал что update поддерживает "упрощенную форму"

"Упрощенная форма" относилось к case, а не update, т.е.
перебор значений операнда вместо перебора условий.
А update, в свою очередь, поддерживает case, чтобы без
курсоров и подзапросов можно было обойтись.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FB3 не работает as cursor
    #39515419
NatNV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!!!
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB3 не работает as cursor
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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