powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Можно ли вызвать из Oracle через dblink функцию в PostgreSQL
4 сообщений из 4, страница 1 из 1
Можно ли вызвать из Oracle через dblink функцию в PostgreSQL
    #38887036
SergeyNZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте
Создал в Oracle dblink к PostgreSQL. Select к таблицам выполняются.
Написал в PostgreSQL функцию
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR REPLACE FUNCTION paybase_schema.test123 (v_input integer) RETURNS smallint AS
$body$
DECLARE
BEGIN
  return v_input;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;


Попробовал вызвать ее в Oracle через dblink
Код: plsql
1.
select "paybase_schema"."test123"@pgsql(1) from dual


получаю ошибку ORA-00904: "paybase_schema"."test123": недопустимый идентификатор

Почему?

Oracle 11.2.0.3 PostgreSQL 9.3
...
Рейтинг: 0 / 0
Можно ли вызвать из Oracle через dblink функцию в PostgreSQL
    #38887188
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyNZ,

3774132
...
Рейтинг: 0 / 0
Можно ли вызвать из Oracle через dblink функцию в PostgreSQL
    #38887485
SergeyNZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо
Решил следующим образом:
Создал в Oracle следующую функцию
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
create or replace function call_func(v_func varchar2) return number is
 v_cursor binary_integer;
 v_nr binary_integer;
 v_ret number;
begin
 v_cursor := dbms_hs_passthrough.open_cursor@pgsql;
 dbms_hs_passthrough.parse@pgsql(v_cursor, 'select ' || v_func) ;
 v_nr := dbms_hs_passthrough.fetch_row@pgsql(v_cursor);
 dbms_hs_passthrough.get_value@pgsql(v_cursor, 1, v_ret);
 dbms_hs_passthrough.close_cursor@pgsql(v_cursor);
 return v_ret; 
end; 


и теперь вызываю в Oracle
Код: plsql
1.
select call_func('paybase_schema.test123(777)') as rez from dual


и все работает

но если в функции в Postgresql сделать параметры Numeric

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE OR REPLACE FUNCTION paybase_schema.test123 (v_input numeric) RETURNS numeric AS
$body$
DECLARE
BEGIN
  return v_input;
END;
$body$
LANGUAGE 'plpgsql'
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER
COST 100;


то
Код: plsql
1.
select call_func('paybase_schema.test123(1.25)') as rez from dual



возвращает почему то 1, т.е дробную часть просто удаляет

почему?
...
Рейтинг: 0 / 0
Можно ли вызвать из Oracle через dblink функцию в PostgreSQL
    #38887580
SergeyNZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если вместо NUMERIC использовать REAL или DOUBLE PRECISION то возвращается и дробная часть
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Можно ли вызвать из Oracle через dblink функцию в PostgreSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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