Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Динамический SQL в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Прошу пояснить, кто знает. Читаю описание динамического SQL в документации по версии 8.1 (http://www.postgresql.org/docs/8.1/static/ecpg-dynamic.html) Вот что там написано: ==================================== ........... ........... A more powerful way to execute arbitrary SQL statements is to prepare them once and execute the prepared statement as often as you like. It is also possible to prepare a generalized version of a statement and then execute specific versions of it by substituting parameters. When preparing the statement, write question marks where you want to substitute parameters later. For example: EXEC SQL BEGIN DECLARE SECTION; const char *stmt = "INSERT INTO test1 VALUES(?, ?);"; EXEC SQL END DECLARE SECTION; EXEC SQL PREPARE mystmt FROM :stmt; ... EXEC SQL EXECUTE mystmt USING 42, 'foobar'; ==================================== Но ведь это же бессмыслица какая-то Смысл динамического SQL в том, что я могу подготавливать (prepare) и потом выполнять (execute) любые заранее неизвестные запросы. В том числе, с заранее неизвестным набором входных параметров. Т.е. я хочу, чтобы было (как в Sybase и в Interbase например) так: вызываем prepare и передаем туда произвольный текст запроса в виде строки, в ответ получаем структуру входных параметров (количество и тип каждого) и структуру выходной таблицы (если это select). Правильно ли я понимаю, что в postgres такой возможности нет ? Да, на всякий случай, речь про интерфейс из Си (или Си++). Мы с postgres не работаем пока, просто смотрим в его сторону. И видим вот такие удивительные недоделки.... Любителей postgres прошу не обижаться :) Я не в том смысле, что, мол, Postgres - Г...., я хочу узнать ответ на свой "вопрос - это есть или этого нет ? " !! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2005, 17:31 |
|
||
|
Динамический SQL в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
блин выж читаете! 1) читайте все 2) читаете не все? см 1) авторНо ведь это же бессмыслица какая-то Смысл динамического SQL в том, что я могу подготавливать (prepare) и потом выполнять (execute) любые заранее неизвестные запросы. любые заранее неизвестные запросы вы можете выполнить и так без prepare, а то что вы там делали с другими базами и как в них чего записывается это уже их проблемы и их библиотеки для работы с ними же. авторПравильно ли я понимаю, что в postgres такой возможности нет ? Да, на всякий случай, речь про интерфейс из Си (или Си++). возможность есть даже из этого примера видно что ее не может не быть. авторМы с postgres не работаем пока, просто смотрим в его сторону. И видим вот такие удивительные недоделки.... самое интересное вас еще и не 1 человек! я всегда думал что 1 голова хорошо а n (где n > 2) лучше PS еще раз внимательно (возможно со словарем прочитайте еще раз то что вы уже "читали") и помедитируйте если не выйдет я могу сказать для чего это все нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2005, 20:04 |
|
||
|
Динамический SQL в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Очень жаль, что в Вашем, vfabr, ответе нет ничего кроме эмоций. Вероятно, я недостаточно подробно описал, что я хочу получить. Если упростить все, насколько это возможно, то я хочу написать на Си функцию такого вида: int prepareAndExecute( const char *sql, int noParams, ... ) { .... } здесь: sql - текст SQL-запроса со знаками ? на местах параметров noParams - число параметров ... - аргументы, задающие типы и значения параметров Пример вызова этой функции: prepareAndExecute( "select from T where F1=? and F2=?", 2, MY_TYPE_INT, 100, MY_TYPE_CHAR, "aaa" ) "select...." - текст запроса 2 - число параметров MY_TYPE_INT, MY_TYPE_CHAR - это некие мои константы, которые означают типы параметров запроса 100 и "aaa" - значения параметров запроса Функция должна выполнить указанный запрос с указанными параметрами. Вопрос: могу ли я такую функцию реализовать, использую библиотеки postgres ? Вопрос "для чего это нужно" прошу в этой теме не обсуждать, т.к. это тема другая. Из приведенных в документации примеров я пока вижу, что это невозможно. Я не исключаю своей тупости и слепоты и прошу Вас, vfabr, дать ссылку на какой-либо док, где нужная мне возможность была бы описана. Пожалуйста, всех желающих ответить на эту тему, очень прошу понять ее постановку, прежде чем отвечать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.12.2005, 21:53 |
|
||
|
Динамический SQL в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
http://www.postgresql.org/docs/8.1/static/client-interfaces.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2005, 01:51 |
|
||
|
Динамический SQL в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
http://www.postgresql.org/docs/8.1/static/libpq-exec.html Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2005, 10:34 |
|
||
|
Динамический SQL в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
sml сли упростить все, насколько это возможно, то я хочу написать на Си функцию такого вида: int prepareAndExecute( const char *sql, int noParams, ... ) см. PQprepare, PQexecPrepared, PQexecParams sml Т.е. я хочу, чтобы было (как в Sybase и в Interbase например) так: вызываем prepare и передаем туда произвольный текст запроса в виде строки, в ответ получаем структуру входных параметров (количество и тип каждого) и структуру выходной таблицы (если это select). Такая возможность (получитьрезультаты разбора) есть на уровне frontend/backend протокола v3: 43.2.3. Extended Query The Describe message (statement variant) specifies the name of an existing prepared statement (or an empty string for the unnamed prepared statement). The response is a ParameterDescription message describing the parameters needed by the statement, followed by a RowDescription message describing the rows that will be returned when the statement is eventually executed (or a NoData message if the statement will not return rows). но в libpq пока(?) нет ф-и типа PGresult * PQdescribe(PGconn * conn, const char * stmtName, int * nParams, Oid ** paramTypeOids); 28.3. Command Execution Functions At present, there is no way to determine the actual data type inferred for any parameters whose types are not specified in paramTypes[]. This is a libpq omission that will probably be rectified in a future release. Хотя, если извратиться, то можно и самому дописать недостающее :) (чтоб погрязнуть в сырцах и отладке ) (пример на Ruby, использует модифицированый драйвер ruby-postgres и подправленную libpq - ну, да, да, мне было нехрен делать :) ) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Код: plaintext 1. 2. 3. Так что все в прЫнцыпе можно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2005, 14:13 |
|
||
|
Динамический SQL в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
Ешшо пример - используется PQprepare (в драйвере): Код: plaintext 1. 2. 3. 4. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2005, 14:31 |
|
||
|
Динамический SQL в PostgreSQL
|
|||
|---|---|---|---|
|
#18+
понятно Всем спасибо Нужна именно возможность получить (как результат prepare) от SQL-сервера описание структуры его входных параметров и структуры выходных данных. Первого, как я понял, сейчас официально нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.12.2005, 20:53 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=33442212&tid=2006789]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
25ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 241ms |
| total: | 338ms |

| 0 / 0 |
