Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / migrating from InterBase: multiple returns / 5 сообщений из 5, страница 1 из 1
26.10.2005, 12:49
    #33344720
za8
za8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
migrating from InterBase: multiple returns
Привет!
Я переношу приложение 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
26.10.2005, 12:53
    #33344733
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
migrating from InterBase: multiple returns
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
26.10.2005, 12:56
    #33344742
za8
za8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
migrating from InterBase: multiple returns
пардон, мимо.
Код: 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
26.10.2005, 14:16
    #33345024
XM
XM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
migrating from InterBase: multiple returns
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
26.10.2005, 15:03
    #33345223
za8
za8
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
migrating from InterBase: multiple returns
Здорово, спасибо большое!
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / migrating from InterBase: multiple returns / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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