Я не уверен, что то, что вы спрашиваете, возможно в том виде, как вы его описываете. DB LINK объявлен на уровне базы данных, и я не уверен, что он может быть назначен как параметр напрямую. Хотя я могу ошибаться.
Мы добиваемся аналогичных результатов в моей работе, делая что-то вроде этого:
-- untested
PROCEDURE my_procedure(target_db IN VARCHAR2) IS
BEGIN
IF target_db = 'database1' THEN
EXECUTE IMMEDIATE 'UPDATE myTable' || database1_dbLinkName ||
' SET a = b WHERE x = z';
NULL;
ELSIF target_db = 'database2' THEN
-- ...
NULL;
END IF;
END;
Я не помню точный синтаксис для содержания database1_dbLinkName
. Я считаю, что это просто "@yourDbLinkName".
Я рекомендую вам прочитать эту страницу, если вы хотите узнать больше: https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:4410488400346721382