powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / migrating from InterBase: multiple returns
5 сообщений из 5, страница 1 из 1
migrating from InterBase: multiple returns
    #33344720
za8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
za8
Гость
Привет!
Я переношу приложение c InterBase на PostgreSQL, приходится переписывать триггеры и хранимые процедуры.

Вопрос: в InterBase процедура может возвращать сразу несколько значений, например,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE PROCEDURE "ADM_REQUESTS_UPDATE_STATUS_ERROR"
(
  "INREQUESTID" INTEGER,
  "INPDFSTATUS" INTEGER
)
AS
begin
  UPDATE adm_requests
  SET    PDFStatus = :InPDFStatus
  WHERE  RequestId = :InRequestId;
end
 ;
 

Нет ли подобной возможности в PostgreSQL?
...
Рейтинг: 0 / 0
migrating from InterBase: multiple returns
    #33344733
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
za8 wrote:
> Вопрос: в InterBase процедура может возвращать сразу несколько значений,
> например,
>
> CREATE PROCEDURE "ADM_REQUESTS_UPDATE_STATUS_ERROR"
> (
> "INREQUESTID" INTEGER,
> "INPDFSTATUS" INTEGER
> )
> AS
> begin
> UPDATE adm_requests
> SET PDFStatus = :InPDFStatus
> WHERE RequestId = :InRequestId;
> end
> ;
>
Не понял, где эта процедура что-то возвращает??? :)

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
migrating from InterBase: multiple returns
    #33344742
za8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
za8
Гость
пардон, мимо.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
CREATE PROCEDURE "ADM_REQUESTS_REQUESTCOUNT" 
(
  "INGROUPID" INTEGER
)
RETURNS
(
  "OUTINFOW" INTEGER,
  "OUTINFOR" INTEGER,
  "OUTINFOC" INTEGER,
  "OUTINFOT" INTEGER
)
AS
BEGIN
  IF (inGroupId IS NOT NULL) THEN
    BEGIN
      SELECT COUNT(RequestId)
      FROM  ADM_Requests
      WHERE GroupId = :inGroupId
      AND   Status =  0 
      INTO :outInfoW;

      SELECT COUNT(RequestId)
      FROM  ADM_Requests
      WHERE GroupId = :inGroupId
      AND   Status =  1 
      INTO :outInfoR;

      SELECT COUNT(RequestId)
      FROM  ADM_Requests
      WHERE GroupId = :inGroupId
      AND   Status =  2 
      INTO :outInfoC;

      SELECT COUNT(RequestId)
      FROM  ADM_Requests
      WHERE GroupId = :inGroupId
      AND   Status = - 1 
      INTO :outInfoT;
    END
  ELSE
    BEGIN
      SELECT COUNT(RequestId)
      FROM  ADM_Requests
      WHERE Status =  0 
      INTO :outInfoW;

      SELECT COUNT(RequestId)
      FROM  ADM_Requests
      WHERE Status =  1 
      INTO :outInfoR;

      SELECT COUNT(RequestId)
      FROM  ADM_Requests
      WHERE Status =  2 
      INTO :outInfoC;

      SELECT COUNT(RequestId)
      FROM  ADM_Requests
      WHERE Status = - 1 
      INTO :outInfoT;
    END
END
 ;
...
Рейтинг: 0 / 0
migrating from InterBase: multiple returns
    #33345024
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. В 8.1 добавлены OUT параметры
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  CREATE FUNCTION ADM_REQUESTS_REQUESTCOUNT
  (
    INGROUPID INTEGER,
    OUT OUTINFOW INTEGER,
    OUT OUTINFOR INTEGER,
    OUT OUTINFOC INTEGER,
    OUT OUTINFOT INTEGER
  ) AS  $$
BEGIN
.....
	SELECT COUNT(RequestId)
	FROM  ADM_Requests
         WHERE Status = - 1 
        INTO outInfoT;
.....
END $$ LANGUAGE 'plpgsql';

SELECT * FROM ADM_REQUESTS_REQUESTCOUNT( 1 );

2. До 8.1:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
create type ADM_REQUESTS_REQUESTCOUNT_TYPE as (
     OUTINFOW INTEGER,
     OUTINFOR INTEGER,
     OUTINFOC INTEGER,
     OUTINFOT INTEGER
);
  CREATE FUNCTION ADM_REQUESTS_REQUESTCOUNT(INGROUPID INTEGER)
	RETURNS  ADM_REQUESTS_REQUESTCOUNT_TYPE AS  $$
DECLARE _res ADM_REQUESTS_REQUESTCOUNT_TYPE;
BEGIN
.....
	SELECT COUNT(RequestId)
	FROM  ADM_Requests
         WHERE Status = - 1 
        INTO _res.outInfoT;
.....
	RETURN _res;
END $$ LANGUAGE 'plpgsql';

SELECT * FROM ADM_REQUESTS_REQUESTCOUNT( 1 );

вот примерно так, проверять лень, подробности в мануале :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
migrating from InterBase: multiple returns
    #33345223
za8
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
za8
Гость
Здорово, спасибо большое!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / migrating from InterBase: multiple returns
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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