Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / prepared and run with bind parameters / 16 сообщений из 16, страница 1 из 1
28.03.2005, 13:11
    #32983700
_YO_GA_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
"SQL statements can be prepared and run with bind parameters"
Не могу понять как в PostgreSQL работает механизм...
Примерно знаю как это в ORACLE , а в postgres - не пойму даже какую главу документации читать... может кто подскажет куда рыть? может какие статейки есть с примерами?
...
Рейтинг: 0 / 0
28.03.2005, 15:40
    #32984221
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
смитри описание PREPARE в доках

Код: plaintext
1.
2.
3.
PREPARE usrrptplan (int, date) AS    SELECT * FROM users u, logs l WHERE u.usrid=$ 1  AND u.usrid=l.usrid    AND l.date = $ 2 ;
EXECUTE usrrptplan( 1 , current_date);
DEALLOCATE usrrptplan;

p.s. этот EXECUTE не тот EXECUTE который в plpgsql
...
Рейтинг: 0 / 0
28.03.2005, 15:43
    #32984231
Fabrichenko Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
Ты bind сделать вообще где пытаешься??
-- plpgsql
-- java
...

где? в зависимости от этого и рез будет разный ;-)
--------------------------------------
жизнь как пестня
...
Рейтинг: 0 / 0
28.03.2005, 16:26
    #32984400
_YO_GA_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
Да разбираюсь как работает перловый модуль DBD::Pg
...
Рейтинг: 0 / 0
28.03.2005, 16:43
    #32984469
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
дык тебе тада надо

$sth = $db->prepare("select a from my_table shere a=?");
$sth->execute(12);
while( @a = $sth->fetchrow_array() )
{
...
print $a[0];
}
$sth->finish();
...
Рейтинг: 0 / 0
28.03.2005, 16:52
    #32984498
_YO_GA_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
да я как раз-таки разбираюсь как это на стороне сервера работает
просто нашел в логах PG запросы типа UPDATE .... $1, $2, $5
и не понял как он их выполнял
...
Рейтинг: 0 / 0
28.03.2005, 16:54
    #32984505
_YO_GA_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
при этом ни PREPARE, ни EXECUTE не увидел
наверное логирование так реализовано что показывается только исходный запрос....
...
Рейтинг: 0 / 0
28.03.2005, 17:04
    #32984549
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
перловый драйвер для PG подставляет пласехлдеры сам !!!! .. неумеет он делать perpare и execute , а то что ты видел в логах это скорее всего апдейт от ХП .

p.s будь осторожен перловый драйвер для PG глюкаво (последнюю версию не видел) особенно в отношении пласехолдеров, но тем не мение пласехолдеры полезная практика.
...
Рейтинг: 0 / 0
28.03.2005, 17:54
    #32984708
_YO_GA_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
Во, хоть один человек нашелся, владеющей хоть какой-то инфой про DBD::Pg
Помоги плиз, натолкни на верный путь....
У меня проблема такого рода:
http://mail.ice.ru/lists/dev/2005-March/001587.html
...
Рейтинг: 0 / 0
28.03.2005, 18:04
    #32984726
_YO_GA_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
Там правда (по ссылке) немного лишней инфы , если вкратце, то перловый скрипт генерит и выполняет запросы, и при insert/update иногда происходит ошибка "Выражение варчар, хотя поле integer!". Смотрю на параметры, которые вместо плейсхолдеров подставлюятся - все должно быть нормально - '0', '1' и т.д.... получается что pg-драйвер уже где-то на финальной стадии делает приведение типа для параметров... зачем правда непонятно, и непонятно в чем баг...
в perldoc DBD::Pg кое-что было про bind_parm(), varchar и т.д.... но если честно, ничерта не понял! :(
...
Рейтинг: 0 / 0
28.03.2005, 18:48
    #32984797
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
приводи к инту '23'::int
...
Рейтинг: 0 / 0
28.03.2005, 18:54
    #32984807
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
$sth = $db->perepare("insert into my_table values (?::int,?::int,?::varchar)");
$sth->execute(1,1,"eee");
....
и т.д.
...
Рейтинг: 0 / 0
28.03.2005, 19:06
    #32984830
_YO_GA_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
так и пришлось делать....
но это ж нездоровая шняга, согласись...
приложение не мое, во скольких еще местах такое вылезет...
ладно, постараюсь поковырять все-таки этот модуль...
очень уж интересно где собака порылась
...
Рейтинг: 0 / 0
28.03.2005, 19:12
    #32984837
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
попробуй поставит поновее DBI::Pg , какой у тебя перл?
...
Рейтинг: 0 / 0
29.03.2005, 11:13
    #32985679
LeXa NalBat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
wbearперловый драйвер для PG подставляет пласехлдеры сам !!!! .. неумеет он делать perpare и executeВроде бы последний DBD::Pg версии 1.40 это умеет: perldoc DBD::Pg$sth = $dbh->prepare($statement, \%attr);

Prepares a statement for later execution. PostgreSQL supports prepared
statements, which enables DBD::Pg to only send the query once, and
simply send the arguments for every subsequent call to execute().
DBD::Pg can use these server-side prepared statements, or it can
just send the entire query to the server each time. The best way
is automatically chosen for each query. This will be sufficient for
most users: keep reading for a more detailed explanation and some
optional flags.

Deciding whether or not to use prepared statements depends on many
factors, but you can force them to be used or not used by passing
the pg_server_prepare attribute to prepare(). A "0" means to never
use prepared statements. This is the default when connected to servers
earlier than version 7.4, which is when prepared statements were introduced.
Setting pg_server_prepare to "1" means that prepared statements
should be used whenever possible. This is the default for servers
version 7.4 or higher.

...Мы работаем на постгресе 7.3, проблем с bind-ом нет, а как с этим на 7.4 и восьмерке - не знаю. :( Кажется, что в каждом prepare писать ?::integer - действительно "нездоровая шняга". :) Может быть устанавливать "pg_server_prepare => 0" при подключении к базе?
...
Рейтинг: 0 / 0
29.03.2005, 11:52
    #32985801
wbear
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
prepared and run with bind parameters
думаю стоит, это гораздо лучше чем ::int .. и насколько я знаю эта фишка с использованием постгревых препаре достаточно свежая.. возможно еще недостаточно обкатанная..
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / prepared and run with bind parameters / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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