|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex TorinЯ многое не могу сделать как сервер А думать как программист Вы способны? То есть способны написать код, который определяет тип параметра и его размер по своему запросу? Alex Torinинтересно почему его не интересует тип в предложении where, но интересует в select. Или для where он способен определить, а для select нет? Иногда тип параметра невозможно определить и для where. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 12:45 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovkdvМеня интересует, что тут непонятного, и почему тут какая-то клоунада на эту тему, вроде "ха-ха, ФБ не может определить тип!"? Да просто люди работали с Оракулом или МС, которые даже не пытаются определить тип параметра и вообще не имеют такой функциональности в API. Дмитрий, ваша любовь к FB понятна и объяснима. И я тоже испытываю теплые чувства к FB ровно за то, что он позволяет и где применяется, а так же по многим другим критериям! Но зачем же такой плевок в сторону того же Oracle - как то по детски право... Да и вроде повода нет для подобных эмоций )) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 12:46 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovAlex TorinЯ многое не могу сделать как сервер А думать как программист Вы способны? То есть способны написать код, который определяет тип параметра и его размер по своему запросу? Alex Torinинтересно почему его не интересует тип в предложении where, но интересует в select. Или для where он способен определить, а для select нет? Иногда тип параметра невозможно определить и для where. Про какой именно код вы говорите - можете конкретизировать? Например определить на клиенте тип параметра и потом передать значение - этого достаточно? Для Where иногда - это когда? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 12:50 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex Torin, а где плевок то? Другая реализация только и всего. Насколько я понял в ФБ тоже можно типы параметров подсовывать из приложения, но это не так просто ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 12:51 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Симонов ДенисAlex Torin, а где плевок то? Другая реализация только и всего. Денис, тут многие с горяча тулят фразы на эмоциях (я не исключение) - тот, кому она была адресована, в контексте своих эмоций надеюсь ее понял )) Да другая реализация - я так и воспринимаю - без фанатизма... Симонов ДенисНасколько я понял в ФБ тоже можно типы параметров подсовывать из приложения, но это не так просто В том то и мой первоначальный вопрос был - подскажите, что я не так делаю или что не понимаю/ не знаю! А вот фраза "думать как программист", сказанная Дмитрием как раз излишне эмоциональна, потому как получается только FB нас дисциплинирует так думать, а остальные системы только плюшками балуют ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:03 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:07 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex Torinподскажите, что я не так делаю или что не понимаю/ не знаю! Судя по всему, ты не знаешь ISC API и как с ним работать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:16 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex TorinПро какой именно код вы говорите - можете конкретизировать? Например определить на клиенте тип параметра и потом передать значение - этого достаточно?Для Where иногда - это когда?Как скомпилированная в исполняемый процессором машинный код клиентская библиотека fbclient.dll/fbclient.so должна определить тип параметра, который хотят передать в запрос? Процессоры, пока что, мысли горе-программистов читать не научились. Скажем, если в параметризованном запросе, в предложении WHERE, тип стоящего справа от оператора сравнения можно определить по типу поля, которое стоит слева от оператора сравнения, то в случае, когда исходя из подготовленного запроса тип параметра установить невозможно, разработчик БД должен задать тип параметра принудительно. Что тут может быть непонятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:26 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
rdb_devAlex TorinПро какой именно код вы говорите - можете конкретизировать? Например определить на клиенте тип параметра и потом передать значение - этого достаточно?Для Where иногда - это когда?Как скомпилированная в исполняемый процессором машинный код клиентская библиотека fbclient.dll/fbclient.so должна определить тип параметра, который хотят передать в запрос? Процессоры, пока что, мысли горе-программистов читать не научились. Скажем, если в параметризованном запросе, в предложении WHERE, тип стоящего справа от оператора сравнения можно определить по типу поля, которое стоит слева от оператора сравнения, то в случае, когда исходя из подготовленного запроса тип параметра установить невозможно, разработчик БД должен задать тип параметра принудительно. Что тут может быть непонятно? НУ например непонятно то, что я его задаю принудительно в параметре на клиенте, а еще то, что этот параметр присутствует и в предложении where других select, объединенных в юнион! А теперь вопрос что из перечисленного вами не соотносится с тем, что я и так делаю? А да фраза "горе программист" - ну так какой есть - я на звезды не претендую. А вот смотрю здесь эмоциональные сопли все готовы разводить, а вдумываться в то, что оппонент пишет скилом таким явно обделены. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:35 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex Torinа еще то, что этот параметр присутствует и в предложении where других select, объединенных в юнион! Во-первых, ты так и не показал эти "другие select". Во-вторых, мой телепатер утверждает, что там присутствует совсем не этот параметр. Alex TorinА теперь вопрос что из перечисленного вами не соотносится с тем, что я и так делаю? Тут проблема не в том, что ты делаешь, а, скорее в том, что ты не делаешь: ты не читаешь документацию на API используемого сервера. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:40 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
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 и как с ним работать. Возможно - тогда я не достоин адекватной помощи в своем вопросе? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:40 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovAlex Torinа еще то, что этот параметр присутствует и в предложении where других select, объединенных в юнион! Во-первых, ты так и не показал эти "другие select". Во-вторых, мой телепатер утверждает, что там присутствует совсем не этот параметр. Вот кусок побольше, но достаточный для понимания Код: sql 1. 2. 3. 4. 5. 6. 7.
Dimitry SibiryakovAlex TorinА теперь вопрос что из перечисленного вами не соотносится с тем, что я и так делаю? Тут проблема не в том, что ты делаешь, а, скорее в том, что ты не делаешь: ты не читаешь документацию на API используемого сервера. это да - согласен - в конкретном API я не силен! Потому и хотел спросить как правильно сделать... ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:45 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex TorinНУ например непонятно то, что я его задаю принудительно в параметре на клиенте, а еще то, что этот параметр присутствует и в предложении where других select, объединенных в юнион!После чего ты задаешь его принудительно в параметре на клиенте? После того, как Prepare запроса уже вывалил ошибку? Да сколько угодно! Всё равно, что пытаться впрыгнуть с перрона в вагон поезда, который уже ушёл. Если твои UNION SELECT с, якобы, корректно заданным параметром идут после SELECT с некорректно заданным параметром, сервер не обязан "глухим дважды служить обедню" и выполнять второй проход в алгоритме подготовки запроса. Не можешь корректно задать параметры - используй EXECUTE BLOCK с типизированными входящими параметрами! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:47 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex TorinВот кусок побольше, но достаточный для понимания Ты таки не поверишь, но это не запрос Firebird. У Firebird нет именованных параметров. И именно поэтому, то, что ты считаешь "одним параметром" на основании его имени - на самом деле два разных параметра. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:48 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex TorinПотому и хотел спросить как правильно сделать... В данном случае будет правильно использовать хранимую процедуру или execute block. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:50 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovAlex TorinВот кусок побольше, но достаточный для понимания Ты таки не поверишь, но это не запрос Firebird. У Firebird нет именованных параметров. И именно поэтому, то, что ты считаешь "одним параметром" на основании его имени - на самом деле два разных параметра. Почему, вам верю! Но для меня это и вправду новость))) Dimitry SibiryakovAlex TorinПотому и хотел спросить как правильно сделать... В данном случае будет правильно использовать хранимую процедуру или execute block. Спасибо за совет! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:54 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex TorinНо для меня это и вправду новость))) И вот тут-то мы и возвращаемся к вопросу нечтения документации на используемый продукт. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:56 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex TorinDimitry SibiryakovИногда тип параметра невозможно определить и для where. Для Where иногда - это когда? Код: sql 1. 2. 3.
Тут сервер может догадаться, что тип параметра Param1 такой же, как и тип поля Field1. Код: sql 1. 2. 3.
И тут может догадаться, что Param1 - это целое. Код: sql 1. 2. 3.
А вот тут получишь "Data type unknown". Код: sql 1. 2.
И тут, естественно, тоже. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 13:58 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex TorinDimitry Sibiryakovпропущено... Во-первых, ты так и не показал эти "другие select". Во-вторых, мой телепатер утверждает, что там присутствует совсем не этот параметр. Вот кусок побольше, но достаточный для понимания Код: sql 1. 2. 3. 4. 5. 6. 7.
Большинству серверов СУБД и клиентских библиотек (включая ODBC) фиолетово, как у тебя называется параметр и где еще он использован. Замени все свои параметры знаками "?" и ты, возможно, догадаешься почему. Именами параметров оперируют лишь высокоуровневые клиентские обёртки, типа FIBPlus, а всё, что ниже, использует очередность задания всех параметров независимо от имени. Иными словами, если у тебя на верхнем уровне используется лишь один именованный параметр, встречающийся в запросе трижды, то на нижнем уровне это будет три безымянных параметра. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 14:00 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
rdb_devAlex TorinНУ например непонятно то, что я его задаю принудительно в параметре на клиенте, а еще то, что этот параметр присутствует и в предложении where других select, объединенных в юнион! После чего ты задаешь его принудительно в параметре на клиенте? После того, как Prepare запроса уже вывалил ошибку? Да сколько угодно! Всё равно, что пытаться впрыгнуть с перрона в вагон поезда, который уже ушёл. Нет - параметр нормально кушается, а ошибка происходит уже на стадии выполнения, отладка возвращает значения параметров, которые там присутствуют! Если вы мне объясните, как я на клиенте могу после вываливания ошибки задать параметр, то вы меня сильно удивите))) rdb_devЕсли твои UNION SELECT с, якобы, корректно заданным параметром идут после SELECT с некорректно заданным параметром, сервер не обязан "глухим дважды служить обедню" и выполнять второй проход в алгоритме подготовки запроса. Смотрим на код, который я выше написал Дмитрию, и рыдаем над вашим умозаключением ))) rdb_devНе можешь корректно задать параметры - используй EXECUTE BLOCK с типизированными входящими параметрами! Ну вот старался же человек, хотел и пять копеек по делу вставить, но не съязвить не смог... Ну вот когда же детство то в попе переиграет и желание задеть и детские обиды пройдут))) ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 14:08 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Dmitry Kurbsky Код: sql 1. 2. 3.
А вот тут получишь "Data type unknown". Прикольно - это для меня тоже новость и тоже только для FB получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 14:13 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
rdb_devAlex Torinпропущено... Вот кусок побольше, но достаточный для понимания Код: sql 1. 2. 3. 4. 5. 6. 7.
Большинству серверов СУБД и клиентских библиотек (включая ODBC) фиолетово, как у тебя называется параметр и где еще он использован. Замени все свои параметры знаками "?" и ты, возможно, догадаешься почему. Именами параметров оперируют лишь высокоуровневые клиентские обёртки, типа FIBPlus, а всё, что ниже, использует очередность задания всех параметров независимо от имени. Иными словами, если у тебя на верхнем уровне используется лишь один именованный параметр, встречающийся в запросе трижды, то на нижнем уровне это будет три безымянных параметра. это понятно - спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 14:14 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
Alex TorinНет - параметр нормально кушается, а ошибка происходит уже на стадии выполнения, отладка возвращает значения параметров, которые там присутствуют! Если вы мне объясните, как я на клиенте могу после вываливания ошибки задать параметр, то вы меня сильно удивите)))Facepalm! Еще раз, для тех, кто в бронепоезде, объясняю, как это работает: 1. Высокоуровневая обёртка нативной клиентской библиотеки, получая команду на подготовку запроса, парсит запрос с именованными параметрами и определяет их очередность. В случае твоего запроса: Код: sql 1. 2. 3. 4. 5. 6. 7.
определит, что параметры с индексами 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 и прочих. Это понятно? ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 14:27 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
rdb_devAlex Torinпропущено... Вот кусок побольше, но достаточный для понимания Код: sql 1. 2. 3. 4. 5. 6. 7.
Большинству серверов СУБД и клиентских библиотек (включая ODBC) фиолетово, как у тебя называется параметр и где еще он использован. Замени все свои параметры знаками "?" и ты, возможно, догадаешься почему. Именами параметров оперируют лишь высокоуровневые клиентские обёртки, типа FIBPlus, а всё, что ниже, использует очередность задания всех параметров независимо от имени. Иными словами, если у тебя на верхнем уровне используется лишь один именованный параметр, встречающийся в запросе трижды, то на нижнем уровне это будет три безымянных параметра. Вы хотите сказать что обёртки парсят sql перед отправкой в api? Так не может быть. Как тогда обёртки не знающие о execute block парсят его параметры? Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 14:31 |
|
Параметры в предложении SELECT
|
|||
---|---|---|---|
#18+
HommerВы хотите сказать что обёртки парсят sql перед отправкой в api? Так не может быть. Как тогда обёртки не знающие о execute block парсят его параметры? Криво. Поэтому execute block в таких обёртках и не работает. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.03.2018, 14:34 |
|
|
start [/forum/topic.php?fid=40&msg=39622015&tid=1561190]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 169ms |
0 / 0 |