Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перенос базы MSSQL на PostgreSQL. Перевод хранимых процедур. / 6 сообщений из 6, страница 1 из 1
06.07.2008, 10:28
    #35413315
Денис Ильин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос базы MSSQL на PostgreSQL. Перевод хранимых процедур.
Всем привет!
сразу скажу, я постргесмен весьма юный.
есть желание перенести базу на PostgreSQL с MSSQL2005.

в MSSQL мы не обращаемся из клиента к таблицам непосредственно, а работаем посредством хранимых процедур. Такой подход оправдал себя на 100%: разделение прав, предкомпиляция, разделение уровней разработки и т.п.

В MSSQL работаем через ADO
примерно так: #import "msado15.dll"
далее логин, запросы SQL - всё это работает.
просто заполняем структурку _CommandPtr и обращаемся к ADO.
до этого момента всё в порядке.

далее возникает следующий затык.
почему то не удаётся возвращать recordset-ы из хранимок. У нас стандартная хранимая процедура в MSSQL выглядит так:

create procedure getFoo( @param1 int, @param2 int ) as
begin
select * from [footable] where [id1] = @param1 and [id2] = @param2
end


при вызове этой процедуры из ADO мы заполняем рекордсет и "гуляем" по нему (MoveFirst(), MoveNext() ).
А вот как написать процедуру на PostgreSQL, что бы со строны клиента можно было бы подцепить рекордсет. output параметры мы практически не используем, по историческим причинам, да и таблицы таким образом передавать нельзя (кажется, в mssql2008 уже можно, но речь не об этом)

спасибо за внимание.
...
Рейтинг: 0 / 0
07.07.2008, 10:02
    #35414178
Funny_Falcon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос базы MSSQL на PostgreSQL. Перевод хранимых процедур.
Язык SQL:
Код: plaintext
1.
2.
3.
4.
5.
6.
create function getfoo( param1 int, param2 int )
returns setof footable
language sql
as $$
  select * from "footable" where "id1" = $ 1  and "id2" = $ 2 ;
$$;

Язык plpgsql
В версии до 8.3:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
create function getfoo( param1 int, param2 int )
returns setof footable
language plpgsql
as $$
declare
  r footable;
begin
  for r in select * from "footable" where "id1" = param1 and "id2" = param2
  loop
    return next r;
  end loop;
end;
$$

В версии 8.3:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
create function getfoo( param1 int, param2 int )
returns setof footable
language plpgsql
as $$
begin
  return query select * from "footable" where "id1" = param1 and "id2" = param2;
end;
$$
...
Рейтинг: 0 / 0
07.07.2008, 10:13
    #35414209
loctyr
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос базы MSSQL на PostgreSQL. Перевод хранимых процедур.
Если нужно вернуть только табличку footable
если при возврате использовать различные объединения,
то придется описывать тип того что будете возвращать
:(
или
возвращать курсор а потом его выбирать
...
Рейтинг: 0 / 0
07.07.2008, 10:16
    #35414218
Денис Ильин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос базы MSSQL на PostgreSQL. Перевод хранимых процедур.
спасибо большое за ответ
я тут начал экспериментировать с возвращаемым recordset, пока что не очень успешно.
если сработает, на рекордсеты забью.

авторЕсли нужно вернуть только табличку footable
да, в принципе, 99% вариантов использования это покрывает, так что всё в порядке.
...
Рейтинг: 0 / 0
07.07.2008, 10:36
    #35414276
Денис Ильин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос базы MSSQL на PostgreSQL. Перевод хранимых процедур.
ура! оно работает
да. радость, правда, была чуть преждевременной, т.к. частенько имеем возврат из временных таблиц...
ну да ладно, это уже детали, будем через курсор возвращать.
...
Рейтинг: 0 / 0
07.07.2008, 10:44
    #35414301
tadmin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перенос базы MSSQL на PostgreSQL. Перевод хранимых процедур.
Денис Ильин
да. радость, правда, была чуть преждевременной, т.к. частенько имеем возврат из временных таблиц...
Для временных таблиц точно так же должно работать.
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Перенос базы MSSQL на PostgreSQL. Перевод хранимых процедур. / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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