|
|
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
execute statement 'select BUILDING_ID from BUILDING where ' ||pWHERE into :pBUILDING_ID; при таком вызове в ХП почему то не работает. где pWHERE - строка условие(типа Street = ... and house = ...), которое формируется динамически. Я тут по форуму поискал, так вроде должно работать так: execute statement 'select BUILDING_ID from BUILDING where STREET = ...' into :pBUILDING_ID; но как тогда прикручивать изменяющийся where? Я пробовал сначала весь запрос (до Into) делать в отдельную переменную типа execute statement MySQL into :pBUILDING_ID но так тоже не работает. Может кто сталкивался? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 13:08:44 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
А чего пишет-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 13:34:42 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
Arithmetic overflow or division by zero has occured ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:00:23 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
Возможно не работает из за того что я так формирую условие: if (iSTREET <> 0) then pWHERE = 'STREET = ' || cast(:iSTREET as varchar(5)); вообще то все это для того чтобы проверять какие входящие параметры в ХП не нулевые, то они и должны учитываться в SQL запросе. Интересно, а нет ли в FB какой нибудь функции типа Oracl'овской Decode? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:15:44 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
Castor Код: plaintext А у меня работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:15:46 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
Dik76А у меня работает. а у тебя условие pWhere какое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:17:24 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
автор cast(:iSTREET as varchar(5)); И сколько символов может быть iSTREET ? Если больше 5 (varchar(5)) - то работать и не будет! Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:25:16 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. Что то я это условие вообще не понял.. А если равно iSTREET = 0, тогда что? И еще STREET - это числовое поле или строка? Если поиск по строке, то Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:26:10 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
DnicoЕсли больше 5 (varchar(5)) - то работать и не будет! нет, только 5 или меньше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:27:49 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
авторArithmetic overflow or division by zero has occured Тогда всю процедуру в студию ... Best regards, Dnico. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:29:49 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
CastorИнтересно, а нет ли в FB какой нибудь функции типа Oracl'овской Decode?Есть лучше - CASE ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:30:17 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
>Dik76 iStreet это integer параметр (код улицы), который я передаю в ХП. Если я передаю туда 0 то он не должен учитываться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:32:38 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
pWHERE = ' STREET = 470 and HOUSE_NUM = 1 and BUILDING_NUM = 3 '; pSQL = 'select BUILDING_ID from BUILDING where ' || pWHERE; execute statement pSQL into :pBUILDING_ID; почему то даже так не хочет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:35:36 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
При = 0 в execute statement 'select BUILDING_ID from BUILDING where ' where будет лишнее или у тебя там еще парамметры есть? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:36:10 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
Присоединяюсь к Dnico, процедуру в студию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:41:55 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
>Dik76 да нет это я проверяю, там есть другое условие, которое обязательно есть в where. Я уже попробовал просто складывать строки вручную (см. мой пост выше) и все равно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:42:00 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
Castor>Dik76 да нет это я проверяю, там есть другое условие, которое обязательно есть в where. Я уже попробовал просто складывать строки вручную (см. мой пост выше) и все равно. А тип у BUILDING_ID и pBUILDING_ID одинаковый? Тут уже обсуждалось, что даже если один smallint , а другой integer , то будут проблемы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:49:55 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
set term /; create procedure PROC_GET_BTI2 returns (pROOM_QTY smallint) as declare variable pBUILDING_ID integer; declare variable pWHERE varchar(100); declare variable pSQL varchar(250); begin pWHERE = ' STREET = 470 and HOUSE_NUM = 1 and BUILDING_NUM = 3 '; pSQL = 'select BUILDING_ID from BUILDING where' || pWHERE; execute statement pSQL into :pBUILDING_ID; pROOM_QTY = :pBUILDING_ID; SUSPEND; end;/ set term ;/; вот так наконец заработала, сейчас буду дальше разбираться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:52:38 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
Somebody2А тип у BUILDING_ID и pBUILDING_ID одинаковый? Тут уже обсуждалось, что даже если один smallint , а другой integer , то будут проблемы. Да все типы передаваемых переменных совпадают, но видимо когда идет преобразование через cast, тогда все и портится. А как в этом случае правильно преобразовывать целое число для подстановки его в строку where? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 15:55:49 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
2Castor Код: plaintext 1. 2. Тут приведения типов ненужно. Код: plaintext 1. 2. так тоже должно сработать. execute statement 'select BUILDING_ID from BUILDING where ' ||pWHERE into :pBUILDING_ID; попробуйте так, может сработает (если тип pBUILDING_ID integer): execute statement 'select cast(BUILDING_ID as integer) from BUILDING where ' ||pWHERE into :pBUILDING_ID; P.S. Может тут можно и без execute statement обойтись? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 16:07:08 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
Не, дело не в cast у меня с ним работает без проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 16:11:33 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
>Somebody2 Как раз без cast'a только что попробовал - процедура компилируется, но при выполнении та же ошибка. А зачем приводить select cast(... , если поле которое я выбираю имеет тип integer? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 16:12:51 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
Есть еще такой способ без Execute Statment: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 16:13:17 |
|
||
|
execute statement + FB1.5
|
|||
|---|---|---|---|
|
#18+
set term /; create procedure PROC_GET_BTI ( pSTREET integer, pHOUSE_NUM integer, pHOUSE_IDX char(1), pBUILDING_NUM integer, pBUILDING_IDX char(1), pS_HOUSE_NUM integer, pS_HOUSE_IDX char(1) ) returns (pROOM_QTY smallint, pAREA_COM numeric(5,1), pAREA_DWELL numeric(5,1)) as declare variable iSTREET integer; declare variable pBUILDING_ID integer; declare variable iHOUSE smallint; declare variable iHOUSE_LIT char(1); declare variable iKORP smallint; declare variable iKORP_LIT char(1); declare variable iSTROEN smallint; declare variable iSTROEN_LIT char(1); declare variable pWHERE varchar(50); declare variable pSQL varchar(250); begin /* инициализация*/ iSTREET = 0; pBUILDING_ID = 0; iHOUSE = 0; iHOUSE_LIT = ''; iKORP = 0; iKORP_LIT = ''; iSTROEN = 0; iSTROEN_LIT = ''; pWHERE = ''; pSQL = ''; /* присвоение переменных*/ iSTREET = :pSTREET; iHOUSE = :pHOUSE_NUM; iHOUSE_LIT = :pHOUSE_IDX; iKORP = :pBUILDING_NUM; iKORP_LIT = :pBUILDING_IDX; iSTROEN = :pS_HOUSE_NUM; iSTROEN_LIT = :pS_HOUSE_IDX; if (iSTREET <> 0) then pWHERE = 'STREET = ' || cast(:iSTREET as varchar(5)); if (iHOUSE <> 0) then pWHERE = pWHERE || ' and HOUSE_NUM = ' || cast(:iHOUSE as varchar(5)); if (iHOUSE_LIT <> '') then pWHERE = pWHERE || ' and HOUSE_IDX = ' || :iHOUSE_LIT; if (iKORP <> 0) then pWHERE = pWHERE || ' and BUILDING_NUM = ' || cast(:iKORP as varchar(5)); if (iKORP_LIT <> '') then pWHERE = pWHERE || ' and BUILDING_IDX = ' || :iKORP_LIT; if (iSTROEN <> 0) then pWHERE = pWHERE || ' and S_HOUSE_NUM = ' || cast(:iSTROEN as varchar(5)); if (iSTROEN_LIT <> '') then pWHERE = pWHERE || ' and S_HOUSE_IDX = ' || :iSTROEN_LIT; /* pWHERE = ' STREET = 470 and HOUSE_NUM = 1 and BUILDING_NUM = 3 '; */ pSQL = 'select BUILDING_ID from BUILDING where' || pWHERE; execute statement pSQL into :pBUILDING_ID; pROOM_QTY = :pBUILDING_ID; pAREA_COM = 0; pAREA_DWELL = 0; SUSPEND; end;/ set term ;/; это ХП. Переменные используются для проверки что мы передали, а что - нет. Улица (STREET) и №дома (HOUSE_NUM) - обязательны, остальные -нет. в конце Area_Com и Area_Dwell = 0 (это потом будет доделываться). Room_Qty имеет тип smallint и ему присваивается integer - но это чтобы только попробовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2004, 16:19:30 |
|
||
|
|

start [/forum/topic.php?fid=40&msg=32646984&tid=1578091]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
201ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
1ms |
| others: | 202ms |
| total: | 521ms |

| 0 / 0 |
