powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / А можно тут создать функцию как на оракле?
20 сообщений из 20, страница 1 из 1
А можно тут создать функцию как на оракле?
    #38817805
Konstanrtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно ли в postgre сделать функцию как на оракле, чтобы был
1 входной параметр, по нему будем проверять некие условия
2 выходных параметра, если условия по первому удовлетворительны
и Returns integer типа код ошибки
как то так:
create function (in a integer, out name varchar, out code varchar) returns integer
как это сделать правильно на plpgsql?
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38817823
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38817875
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KonstanrtinМожно ли в postgre сделать функцию как на оракле, чтобы был
1 входной параметр, по нему будем проверять некие условия
2 выходных параметра, если условия по первому удовлетворительны
и Returns integer типа код ошибки
как то так:
create function (in a integer, out name varchar, out code varchar) returns integer
как это сделать правильно на plpgsql?

Всегда возвращать из функции все 3 значения... просто в случае ошибки первые два в NULL ставить.
Функция не умеет разное количетсво колонок возвращать в разных ситуациях.

PS: я что то такой возможности в оракле не помню. Приведите пример оракловой функции с требуемой функциональностью.

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38817878
kak_v_oracel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KonstanrtinМожно ли в postgre сделать функцию как на оракле, чтобы был
1 входной параметр, по нему будем проверять некие условия
2 выходных параметра, если условия по первому удовлетворительны
и Returns integer типа код ошибки
как то так:
create function (in a integer, out name varchar, out code varchar) returns integer
как это сделать правильно на plpgsql?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create function kak_v_oracel(IN a integer, out b_check boolean)
RETURNS boolean
AS
$kak_v_oracel$
BEGIN
   IF a=1 THEN
       b_check:=true;
   ELSE 
         RAISE 'ERROR v pg ne kak v oracel,  -- varhar(5) P0001'; 
   END;
   RETURN;
END;
$kak_v_oracel$;
-----------
SELECT kak_v_oracel(2);
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38817913
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kak_v_oracelKonstanrtinМожно ли в postgre сделать функцию как на оракле, чтобы был
1 входной параметр, по нему будем проверять некие условия
2 выходных параметра, если условия по первому удовлетворительны
и Returns integer типа код ошибки
как то так:
create function (in a integer, out name varchar, out code varchar) returns integer
как это сделать правильно на plpgsql?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
create function kak_v_oracel(IN a integer, out b_check boolean)
RETURNS boolean
AS
$kak_v_oracel$
BEGIN
   IF a=1 THEN
       b_check:=true;
   ELSE 
         RAISE 'ERROR v pg ne kak v oracel,  -- varhar(5) P0001'; 
   END;
   RETURN;
END;
$kak_v_oracel$;
-----------
SELECT kak_v_oracel(2);



так RAISE это же не возврат значения
RAISE есть и в Pg c тем же синтаксисом:
http://www.postgresql.org/docs/9.3/static/plpgsql-errors-and-messages.html

--Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38817968
Konstanrtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Maxim Boguk Приведите пример оракловой функции с требуемой функциональностью.
Да сколько угодно можете и сами придумать, главное там такая возможность есть
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
declare
   account_num varchar2(100);
   address varchar2(300);
   result integer;
begin
  result := get_my_func(123, account_num, address);
  if result <> 0 then
    raise_error 'dsfgfsdfgsdfg';
  else
    do_something_with_account_num_and_address;
  end if;
end;


получается в pg никак?
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38817970
Konstanrtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kak_v_oracel, Ваш пример не подходит, т.к. нужно несколько out параметров и один integer в returns, чтобы вызывать i := get_func(111, a, b);
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38817992
kak_v_oracel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konstanrtinkak_v_oracel, Ваш пример не подходит, т.к. нужно несколько out параметров и один integer в returns, чтобы вызывать i := get_func(111, a, b);

мальчик, ты тупой ?
тебе дали ссылку 16910607 -- делай чо хошь

PS много полей возвращаются как "returns record"



PPS и имей в виду, дурачок, -- параметры, в т.ч. inout передаются в пж по значению
поэтому все твои выбоины с неявной передачей якобы через out параметры не пройдут. после вызова надо явно присваивать переменным текущего контекста поля возврата.
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818124
Konstanrtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kak_v_oracelPS много полей возвращаются как "returns record"

так тоже не подходит, хотя я надеелся что в pg есть такое просто я не нашел

P.S. можно не словоблудить как ты, д..., а просто написать - "так нельзя в pg"
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818210
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstanrtin... а просто написать - "так нельзя в pg"
Можно! В PostgreSQL можно больше, чем в ORACLE — однозначно. Вот только постановка задачи несколько завуалирована, потому и блуждаем.
Думается, что если все же вы потратите свое время и почитаете документацию, то все найдете.

Тут много примеров что PostgreSQL может для PL/SQL функций: http://www.postgresql.org/docs/current/interactive/xfunc-sql.html
Аналогичное можно делать и на других языках, из которых PL/pgSQL (вкупе с PL/SQL) является стандартным: http://www.postgresql.org/docs/current/interactive/plpgsql.html
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818226
Лопата
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,

не суетитесь

ТС хочет передаваться по ссылке, чтобы по выходу из ф-ии переданные в процедуру переменные (в контексте вызова) получили значение, присвоенное в процедуре, без каких-то его телодвижений.


Другое дело, -- он объяснить этого не может, а когда его поправляют -- дуется, как беременная на 8-м месяце.


а т.к. передача в plpgsql, как минимум, идет по значению, то "так нельзя". можно иначе.

PS с этим связаны проблемы тормозных агрегатов.
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818296
Konstanrtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
лопатаон объяснить этого не может
вы на форуме сидите или как бабки у подъезда, которым только дай повод? не можете без провокаций - не пишите вообще. Завуалирована задача? Объяснить не может? Куда уж понятнее задача? Меня интересует (конкретно!) именно такой синтаксис как я написал! Обратился на форум потому что сам в доках ничего точно такого не нашел. Блин вы точно - бабки у подъезда. Спасибо всем, еще раз сюда приходить.... Стадо нЕлюдей.
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818330
какбе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konstanrtin,
неуважаемый, вы себя без очепятки, какбе, даже набрать не можете, а туда же -- указивки издавать.

вы тут, как вы правильно заметили, на форуме, а не в частной лавочке, т.ч. указания, кому тут писать и о чём -- оставьте при себе.


ещё раз вам объясняю -- проблема ваша не в синтаксисе [каком либо], а в механизме передачи параметров.
именно потому, что параметры в постгресе передаются по значению -- какие то процедуры (которые могли бы ничего не возвращать, но при этом менять содержимое переданных по ссылке параметров) в постгресе не существуют как класс. все они являются функциями. возвращают значения (при множестве out параметров -- значения полей возврата -- record-а, число полей должно совпадать с числом out параметров). "наружние" же значения в переданной "снаружи" переменной при этом не меняется (при передаче из контекста в контекст передается значение, но не ссылка). И по возвращению вам потребуется дополнительно произвести присвоения (если вы ожидали обратного).

что-то можно, наверное, попробовать сделать на рефкурсорах (значение== имя куросра == "ссылка") . не пробовал
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818373
какбе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот тут, какбе, почитайте, если мне не верите:

http://stackoverflow.com/questions/9380257/oracle-stored-procedure-out-parameter-vs-postgresql-pl-pgsql-function-out-param
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818387
Konstanrtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какбеKonstanrtin,
неуважаемый, указания, кому тут писать и о чём -- оставьте при себе.

...бабушка, это не я семечки нагрыз, тут уже было... не ругайтесь, идите там уже сериал начался...

какие то процедуры (которые могли бы ничего не возвращать, но при этом менять содержимое переданных по ссылке параметров) в постгресе не существуют как класс. все они являются функциями. возвращают значения (при множестве out параметров -- значения полей возврата -- record-а)
ок, это я тоже в доках нашел до обращения сюда, НЕ спасибо
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818395
йошкин кот
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konstanrtin <>
ок, это я тоже в доках нашел до обращения сюда, НЕ спасибоесли УЖЕ нашёл, а всё равно припёрси спрашивать -- думаю, шо ты , мальчег, тормас, а даже не констанРтин
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818398
Konstanrtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
йошкин кот, брысь
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818403
какбе
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konstanrtin,
никшни , тормас
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818856
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konstanrtin,

Близкое к тому, что ты хочешь можно сделать так.
Функция:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
create function get_my_func (
   x int
  ,OUT ret_code int
  ,OUT account_num text
  ,OUT address text
) AS $$
begin
   if x > 0
   then
      ret_code := 0;
      account_num := 'My account num';
      address := 'My address';
   else
      ret_code := -1;
      account_num := null;
      address := null;
   end if;
end;
$$ language plpgsql;


Вызов:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
do $$
declare
   r record;
begin
   r := get_my_func (10);
   if r.ret_code <> 0
   then
      raise notice 'Error in get_my_func';
   else
      raise notice 'Do something with % and %', r.account_num, r.address;
   end if;
end;
$$ language plpgsql;


В итоге отличия от ораклового варианта следующие:
1. в функцию не нужно передавать два out параметра
2. функция возвращает запись
...
Рейтинг: 0 / 0
А можно тут создать функцию как на оракле?
    #38818977
Konstanrtin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов, спасибо огромное во-первых за адекватность, во-вторых за ответ! Побольше бы таких людей, а не этих высокомерных типов, тогда и на форумы охота будет заходить.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / А можно тут создать функцию как на оракле?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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