Я новичок в технологии Oracle, пожалуйста, помогите мне.
Я не мог найти ответ, какие были. Моя задача - запустить две функции, передав параметр через dblink. У меня есть две одинаковые функции на db1 и db2, которые расположены на двух разных виртуальных машинах в Hyper v, мне удалось создать между ними dblink, но когда я запрашиваю следующую команду, отображается указанное выше сообщение об ошибке.
SELECT /*+ parallel(4) */ *
FROM TABLE(my_fun(CURSOR(SELECT PDBID, STRUCTURE FROM PROTEINS
WHERE PDBID= '1n6h'),
CURSOR(SELECT PDBID, STRUCTURE FROM PROTEINS WHERE PDBID BETWEEN
'1n6h' AND '1n6h'), PRINT => 0, ALGORITHM_TYPE=>2, CHAIN2=>'A'))
UNION ALL
SELECT /*+ parallel(4) */ *
FROM TABLE(my_fun@test_link2(CURSOR(SELECT PDBID, STRUCTURE FROM
PROTEINS WHERE PDBID= '1n6h'),
CURSOR(SELECT PDBID, STRUCTURE FROM PROTEINS WHERE PDBID BETWEEN
'1n6n' AND '1n6n'), PRINT => 0, ALGORITHM_TYPE=>2, CHAIN2=>'A'));
Это то, что я создал как в db1, так и в db2, я пытался создать функцию-оболочку в обеих базах данных, но я все еще не могу получить данные через dblink.
CREATE OR REPLACE
type my_record force is object (
QPDBID varchar2(8),
DBPDBID varchar2(8));
/
CREATE OR REPLACE TYPE MY_TYPE AS TABLE OF
my_record
/
CREATE OR REPLACE FUNCTION myfun_rem(qpdb in varchar2,dbpdbid1 in varchar2)
RETURN MY_TYPE
AS
v_my_tst MY_TYPE;
BEGIN
SELECT MY_RECORD(QPDBID ,DBPDBID)
BULK COLLECT INTO v_my_tst
FROM
(SELECT QPDBID, DBPDBID FROM TABLE(my_fun(CURSOR(SELECT PDBID,
STRUCTURE FROM PROTEINS WHERE PDBID= QPDBID ),
CURSOR(SELECT PDBID, STRUCTURE FROM PROTEINS WHERE PDBID BETWEEN
QPDBID AND QPDBID ), PRINT => 0, ALGORITHM_TYPE=>2, CHAIN2=>'A')));
RETURN v_my_tst;
EXCEPTION
WHEN OTHERS THEN
v_my_tst.DELETE;
RETURN v_my_tst;
END;
/
SELECT * FROM TABLE(myfun_rem(param1,param2)); --this works locally but not remotely (select * from table(myfun_rem@test_link(param1,param2))
SELECT * FROM TABLE(myfun_loc(param1,param2))
union all
SELECT * FROM TABLE(myfun_rem@test_link(param1,param2,parm3));
--не работает то же сообщение об ошибке, что и выше
Я попытался создать представление в удаленной базе данных db2, но данные не отображаются, так как моя функция требует передачи параметров, что невозможно для передачи параметра в представление.
p.s. простите за мой плохой английский