powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Параметры в предложении SELECT
25 сообщений из 110, страница 2 из 5
Параметры в предложении SELECT
    #39621950
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex TorinЯ многое не могу сделать как сервер

А думать как программист Вы способны? То есть способны написать код, который определяет
тип параметра и его размер по своему запросу?

Alex Torinинтересно почему его не интересует тип в предложении where, но интересует в select. Или
для where он способен определить, а для select нет?

Иногда тип параметра невозможно определить и для where.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39621951
Alex Torin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovkdvМеня интересует, что тут непонятного, и почему тут какая-то клоунада на эту тему, вроде
"ха-ха, ФБ не может определить тип!"?

Да просто люди работали с Оракулом или МС, которые даже не пытаются определить тип
параметра и вообще не имеют такой функциональности в API.
Дмитрий, ваша любовь к FB понятна и объяснима. И я тоже испытываю теплые чувства к FB ровно за то, что он позволяет и где применяется, а так же по многим другим критериям! Но зачем же такой плевок в сторону того же Oracle - как то по детски право... Да и вроде повода нет для подобных эмоций ))
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39621954
Alex Torin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAlex TorinЯ многое не могу сделать как сервер

А думать как программист Вы способны? То есть способны написать код, который определяет
тип параметра и его размер по своему запросу?

Alex Torinинтересно почему его не интересует тип в предложении where, но интересует в select. Или
для where он способен определить, а для select нет?

Иногда тип параметра невозможно определить и для where.

Про какой именно код вы говорите - можете конкретизировать? Например определить на клиенте тип параметра и потом передать значение - этого достаточно?
Для Where иногда - это когда?
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39621956
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Torin,

а где плевок то? Другая реализация только и всего. Насколько я понял в ФБ тоже можно типы параметров подсовывать из приложения, но это не так просто
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39621962
Alex Torin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисAlex Torin,

а где плевок то? Другая реализация только и всего.
Денис, тут многие с горяча тулят фразы на эмоциях (я не исключение) - тот, кому она была адресована, в контексте своих эмоций надеюсь ее понял )) Да другая реализация - я так и воспринимаю - без фанатизма...
Симонов ДенисНасколько я понял в ФБ тоже можно типы параметров подсовывать из приложения, но это не так просто
В том то и мой первоначальный вопрос был - подскажите, что я не так делаю или что не понимаю/ не знаю!

А вот фраза "думать как программист", сказанная Дмитрием как раз излишне эмоциональна, потому как получается только FB нас дисциплинирует так думать, а остальные системы только плюшками балуют )))
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39621966
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex TorinНо зачем же такой плевок в сторону того же Oracle - как то по детски право... Да и вроде
повода нет для подобных эмоций ))

Нет повода? То есть ты можешь ткнуть пальцем в функцию OCI, которая позволит получить тип
данных и размер буфера для параметра у запроса "select :param from t"? Сделай это,
пожалуйста, потому что лично мои поиски такой функции успехом не увенчались.

Alex TorinПро какой именно код вы говорите - можете конкретизировать?

Я говорю про заполнение ключевых полей структуры XSQLVAR: sqltype, sqlsubtype, sqllen,
sqlscale. четыре оператора присваивания. Можете Вы написать код, который заполнит эти поля
на основании Вашего запроса "select ? from t"?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39621975
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Torinподскажите, что я не так делаю или что не понимаю/ не знаю!

Судя по всему, ты не знаешь ISC API и как с ним работать.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39621988
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex TorinПро какой именно код вы говорите - можете конкретизировать? Например определить на клиенте тип параметра и потом передать значение - этого достаточно?Для Where иногда - это когда?Как скомпилированная в исполняемый процессором машинный код клиентская библиотека fbclient.dll/fbclient.so должна определить тип параметра, который хотят передать в запрос? Процессоры, пока что, мысли горе-программистов читать не научились. Скажем, если в параметризованном запросе, в предложении WHERE, тип стоящего справа от оператора сравнения можно определить по типу поля, которое стоит слева от оператора сравнения, то в случае, когда исходя из подготовленного запроса тип параметра установить невозможно, разработчик БД должен задать тип параметра принудительно.
Что тут может быть непонятно?
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39621996
Alex Torin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devAlex TorinПро какой именно код вы говорите - можете конкретизировать? Например определить на клиенте тип параметра и потом передать значение - этого достаточно?Для Where иногда - это когда?Как скомпилированная в исполняемый процессором машинный код клиентская библиотека fbclient.dll/fbclient.so должна определить тип параметра, который хотят передать в запрос? Процессоры, пока что, мысли горе-программистов читать не научились. Скажем, если в параметризованном запросе, в предложении WHERE, тип стоящего справа от оператора сравнения можно определить по типу поля, которое стоит слева от оператора сравнения, то в случае, когда исходя из подготовленного запроса тип параметра установить невозможно, разработчик БД должен задать тип параметра принудительно.
Что тут может быть непонятно?
НУ например непонятно то, что я его задаю принудительно в параметре на клиенте, а еще то, что этот параметр присутствует и в предложении where других select, объединенных в юнион!
А теперь вопрос что из перечисленного вами не соотносится с тем, что я и так делаю?
А да фраза "горе программист" - ну так какой есть - я на звезды не претендую. А вот смотрю здесь эмоциональные сопли все готовы разводить, а вдумываться в то, что оппонент пишет скилом таким явно обделены.
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39621999
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex Torinа еще то, что этот параметр присутствует и в предложении where других select, объединенных
в юнион!

Во-первых, ты так и не показал эти "другие select".
Во-вторых, мой телепатер утверждает, что там присутствует совсем не этот параметр.

Alex TorinА теперь вопрос что из перечисленного вами не соотносится с тем, что я и
так делаю?
Тут проблема не в том, что ты делаешь, а, скорее в том, что ты не делаешь: ты не читаешь
документацию на API используемого сервера.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622000
Alex Torin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAlex TorinНо зачем же такой плевок в сторону того же Oracle - как то по детски право... Да и вроде
повода нет для подобных эмоций ))

Нет повода? То есть ты можешь ткнуть пальцем в функцию OCI, которая позволит получить тип
данных и размер буфера для параметра у запроса "select :param from t"? Сделай это,
пожалуйста, потому что лично мои поиски такой функции успехом не увенчались.
Дмитрий, выдохните! Я спросил помощи как грамотно это в FB сделать... и не собирался никоем образом сравнивать его с Oracle. Если это для вас больная тема, то просто выдохните!
Dimitry SibiryakovAlex TorinПро какой именно код вы говорите - можете конкретизировать?

Я говорю про заполнение ключевых полей структуры XSQLVAR: sqltype, sqlsubtype, sqllen,
sqlscale. четыре оператора присваивания. Можете Вы написать код, который заполнит эти поля
на основании Вашего запроса "select ? from t"?..

Покопаю для общего развития - спасибо...
Dimitry SibiryakovСудя по всему, ты не знаешь ISC API и как с ним работать.
Возможно - тогда я не достоин адекватной помощи в своем вопросе?
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622005
Alex Torin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAlex Torinа еще то, что этот параметр присутствует и в предложении where других select, объединенных
в юнион!

Во-первых, ты так и не показал эти "другие select".
Во-вторых, мой телепатер утверждает, что там присутствует совсем не этот параметр.
Вот кусок побольше, но достаточный для понимания
Код: sql
1.
2.
3.
4.
5.
6.
7.
select v1.ISSUEID, 0 as OWNERID, v1.RORD, v1.UNITID, v1.UNITTYPE, v1.UNITNAME, v1.UNITVALUE
  from V_ISSUEUNIT v1
  where :OWNERID = 0 and v1.ISSUEID = :PK_ISSUED_ID
union all
select  cast(:PK_ISSUED_ID as bigint), v2.OWNERID, v2.RORD, v2.UNITID, v2.UNITTYPE, v2.UNITNAME, v2.UNITVALUE
  from V_UNITREL v2
  where :OWNERID <> 0 and v2.OWNERID = :OWNERID



Dimitry SibiryakovAlex TorinА теперь вопрос что из перечисленного вами не соотносится с тем, что я и
так делаю?
Тут проблема не в том, что ты делаешь, а, скорее в том, что ты не делаешь: ты не читаешь
документацию на API используемого сервера.

это да - согласен - в конкретном API я не силен! Потому и хотел спросить как правильно сделать...
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622006
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex TorinНУ например непонятно то, что я его задаю принудительно в параметре на клиенте, а еще то, что этот параметр присутствует и в предложении where других select, объединенных в юнион!После чего ты задаешь его принудительно в параметре на клиенте? После того, как Prepare запроса уже вывалил ошибку? Да сколько угодно! Всё равно, что пытаться впрыгнуть с перрона в вагон поезда, который уже ушёл. Если твои UNION SELECT с, якобы, корректно заданным параметром идут после SELECT с некорректно заданным параметром, сервер не обязан "глухим дважды служить обедню" и выполнять второй проход в алгоритме подготовки запроса. Не можешь корректно задать параметры - используй EXECUTE BLOCK с типизированными входящими параметрами!
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622008
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex TorinВот кусок побольше, но достаточный для понимания

Ты таки не поверишь, но это не запрос Firebird. У Firebird нет именованных параметров. И
именно поэтому, то, что ты считаешь "одним параметром" на основании его имени - на самом
деле два разных параметра.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622010
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex TorinПотому и хотел спросить как правильно сделать...

В данном случае будет правильно использовать хранимую процедуру или execute block.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622014
Alex Torin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovAlex TorinВот кусок побольше, но достаточный для понимания
Ты таки не поверишь, но это не запрос Firebird. У Firebird нет именованных параметров. И
именно поэтому, то, что ты считаешь "одним параметром" на основании его имени - на самом
деле два разных параметра.
Почему, вам верю! Но для меня это и вправду новость)))
Dimitry SibiryakovAlex TorinПотому и хотел спросить как правильно сделать...
В данном случае будет правильно использовать хранимую процедуру или execute block.
Спасибо за совет!
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622015
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex TorinНо для меня это и вправду новость)))

И вот тут-то мы и возвращаемся к вопросу нечтения документации на используемый продукт.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622017
Dmitry Kurbsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex TorinDimitry SibiryakovИногда тип параметра невозможно определить и для where.
Для Where иногда - это когда?
Код: sql
1.
2.
3.
select Field1,Field2
from Table1
where Field1=:Param1

Тут сервер может догадаться, что тип параметра Param1 такой же, как и тип поля Field1.

Код: sql
1.
2.
3.
select Field1,Field2
from Table1
where :Param1=1

И тут может догадаться, что Param1 - это целое.

Код: sql
1.
2.
3.
select Field1,Field2
from Table1
where :Param1=:Param2

А вот тут получишь "Data type unknown".

Код: sql
1.
2.
select :Param1
from Table1

И тут, естественно, тоже.
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622022
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex TorinDimitry Sibiryakovпропущено...

Во-первых, ты так и не показал эти "другие select".
Во-вторых, мой телепатер утверждает, что там присутствует совсем не этот параметр.
Вот кусок побольше, но достаточный для понимания
Код: sql
1.
2.
3.
4.
5.
6.
7.
select v1.ISSUEID, 0 as OWNERID, v1.RORD, v1.UNITID, v1.UNITTYPE, v1.UNITNAME, v1.UNITVALUE
  from V_ISSUEUNIT v1
  where :OWNERID = 0 and v1.ISSUEID = :PK_ISSUED_ID
union all
select  cast(:PK_ISSUED_ID as bigint), v2.OWNERID, v2.RORD, v2.UNITID, v2.UNITTYPE, v2.UNITNAME, v2.UNITVALUE
  from V_UNITREL v2
  where :OWNERID <> 0 and v2.OWNERID = :OWNERID

Большинству серверов СУБД и клиентских библиотек (включая ODBC) фиолетово, как у тебя называется параметр и где еще он использован. Замени все свои параметры знаками "?" и ты, возможно, догадаешься почему. Именами параметров оперируют лишь высокоуровневые клиентские обёртки, типа FIBPlus, а всё, что ниже, использует очередность задания всех параметров независимо от имени. Иными словами, если у тебя на верхнем уровне используется лишь один именованный параметр, встречающийся в запросе трижды, то на нижнем уровне это будет три безымянных параметра.
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622031
Alex Torin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devAlex TorinНУ например непонятно то, что я его задаю принудительно в параметре на клиенте, а еще то, что этот параметр присутствует и в предложении where других select, объединенных в юнион!
После чего ты задаешь его принудительно в параметре на клиенте? После того, как Prepare запроса уже вывалил ошибку? Да сколько угодно! Всё равно, что пытаться впрыгнуть с перрона в вагон поезда, который уже ушёл.
Нет - параметр нормально кушается, а ошибка происходит уже на стадии выполнения, отладка возвращает значения параметров, которые там присутствуют! Если вы мне объясните, как я на клиенте могу после вываливания ошибки задать параметр, то вы меня сильно удивите)))
rdb_devЕсли твои UNION SELECT с, якобы, корректно заданным параметром идут после SELECT с некорректно заданным параметром, сервер не обязан "глухим дважды служить обедню" и выполнять второй проход в алгоритме подготовки запроса.
Смотрим на код, который я выше написал Дмитрию, и рыдаем над вашим умозаключением )))
rdb_devНе можешь корректно задать параметры - используй EXECUTE BLOCK с типизированными входящими параметрами!
Ну вот старался же человек, хотел и пять копеек по делу вставить, но не съязвить не смог... Ну вот когда же детство то в попе переиграет и желание задеть и детские обиды пройдут)))
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622043
Alex Torin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry Kurbsky
Код: sql
1.
2.
3.
select Field1,Field2
from Table1
where :Param1=:Param2

А вот тут получишь "Data type unknown".

Прикольно - это для меня тоже новость и тоже только для FB получается.
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622047
Alex Torin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devAlex Torinпропущено...

Вот кусок побольше, но достаточный для понимания
Код: sql
1.
2.
3.
4.
5.
6.
7.
select v1.ISSUEID, 0 as OWNERID, v1.RORD, v1.UNITID, v1.UNITTYPE, v1.UNITNAME, v1.UNITVALUE
  from V_ISSUEUNIT v1
  where :OWNERID = 0 and v1.ISSUEID = :PK_ISSUED_ID
union all
select  cast(:PK_ISSUED_ID as bigint), v2.OWNERID, v2.RORD, v2.UNITID, v2.UNITTYPE, v2.UNITNAME, v2.UNITVALUE
  from V_UNITREL v2
  where :OWNERID <> 0 and v2.OWNERID = :OWNERID

Большинству серверов СУБД и клиентских библиотек (включая ODBC) фиолетово, как у тебя называется параметр и где еще он использован. Замени все свои параметры знаками "?" и ты, возможно, догадаешься почему. Именами параметров оперируют лишь высокоуровневые клиентские обёртки, типа FIBPlus, а всё, что ниже, использует очередность задания всех параметров независимо от имени. Иными словами, если у тебя на верхнем уровне используется лишь один именованный параметр, встречающийся в запросе трижды, то на нижнем уровне это будет три безымянных параметра.
это понятно - спасибо!
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622059
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex TorinНет - параметр нормально кушается, а ошибка происходит уже на стадии выполнения, отладка возвращает значения параметров, которые там присутствуют! Если вы мне объясните, как я на клиенте могу после вываливания ошибки задать параметр, то вы меня сильно удивите)))Facepalm!
Еще раз, для тех, кто в бронепоезде, объясняю, как это работает:

1. Высокоуровневая обёртка нативной клиентской библиотеки, получая команду на подготовку запроса, парсит запрос с именованными параметрами и определяет их очередность. В случае твоего запроса:
Код: sql
1.
2.
3.
4.
5.
6.
7.
select v1.ISSUEID, 0 as OWNERID, v1.RORD, v1.UNITID, v1.UNITTYPE, v1.UNITNAME, v1.UNITVALUE
  from V_ISSUEUNIT v1
  where :OWNERID = 0 and v1.ISSUEID = :PK_ISSUED_ID
union all
select  cast(:PK_ISSUED_ID as bigint), v2.OWNERID, v2.RORD, v2.UNITID, v2.UNITTYPE, v2.UNITNAME, v2.UNITVALUE
  from V_UNITREL v2
  where :OWNERID <> 0 and v2.OWNERID = :OWNERID

определит, что параметры с индексами 1, 4, 5 имеют имя "OWNERID", а параметры с индексами 2 и 3 имеют имя "PK_ISSUED_ID".

2. Далее, высокоуровневая обертка меняет имена параметров на символ, используемый конкретной СУБД для параметров параметризованного запроса (обычно, это символ "?") и передает модифицированный запрос на подготовку серверу. Серверу, как становится очевидно, совершенно пофиг на имена параметров, указанные в переданном высокоуровневой обёртке запросе и каждый "?" при подготовке запроса он воспринимает как отдельный параметр;

3. Если серверу удается определить все типы этих безымянных параметров и подготовить запрос, сервер возвращает нативной библиотеке количество и типы всех этих параметров, значения которых должна заполнить высокоуровневая обёртка в ранее определенной очередности, а именно - для параметров с индексами 1, 4 и 5 задать значение параметра "OWNERID", а для параметров с индексами 2 и 3 задать значение параметра "PK_ISSUED_ID";

Так работает подавляющее число СУБД, их нативных библиотек и даже ODBC с незапамятных времен, включая MS SQL, MySQL, Interbase, FirebirdSQL и прочих.
Это понятно?
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622062
Hommer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rdb_devAlex Torinпропущено...

Вот кусок побольше, но достаточный для понимания
Код: sql
1.
2.
3.
4.
5.
6.
7.
select v1.ISSUEID, 0 as OWNERID, v1.RORD, v1.UNITID, v1.UNITTYPE, v1.UNITNAME, v1.UNITVALUE
  from V_ISSUEUNIT v1
  where :OWNERID = 0 and v1.ISSUEID = :PK_ISSUED_ID
union all
select  cast(:PK_ISSUED_ID as bigint), v2.OWNERID, v2.RORD, v2.UNITID, v2.UNITTYPE, v2.UNITNAME, v2.UNITVALUE
  from V_UNITREL v2
  where :OWNERID <> 0 and v2.OWNERID = :OWNERID

Большинству серверов СУБД и клиентских библиотек (включая ODBC) фиолетово, как у тебя называется параметр и где еще он использован. Замени все свои параметры знаками "?" и ты, возможно, догадаешься почему. Именами параметров оперируют лишь высокоуровневые клиентские обёртки, типа FIBPlus, а всё, что ниже, использует очередность задания всех параметров независимо от имени. Иными словами, если у тебя на верхнем уровне используется лишь один именованный параметр, встречающийся в запросе трижды, то на нижнем уровне это будет три безымянных параметра.
Вы хотите сказать что обёртки парсят sql перед отправкой в api? Так не может быть. Как тогда обёртки не знающие о execute block парсят его параметры?
Код: sql
1.
2.
3.
4.
5.
execute block (P1 integer = :P) returns (Res integer) as
begin
  :Res = :P1 + :P1;
  suspend;
end
...
Рейтинг: 0 / 0
Параметры в предложении SELECT
    #39622064
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HommerВы хотите сказать что обёртки парсят sql перед отправкой в api? Так не может быть. Как
тогда обёртки не знающие о execute block парсят его параметры?

Криво. Поэтому execute block в таких обёртках и не работает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 110, страница 2 из 5
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Параметры в предложении SELECT
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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