我有另一个(非常糟糕的)想法给你-
您可以在 plsql 中创建一个为用户动态创建 DBLink 的函数。
然后,您将尝试(再次动态地)DUAL
使用该 dblink 查询表,
如果它有效 - 返回 ok 否则返回 not ok。
然后删除(再次动态)dblink。
应该看起来像这个匿名块-
DECLARE
res NUMBER := 1;
BEGIN
EXECUTE IMMEDIATE 'create database link temp_dblink connect to user identified by password using ''dbname''';
BEGIN
EXECUTE IMMEDIATE 'select 1 from dual@temp_dblink';
EXCEPTION
WHEN others THEN
res := 0;
END;
ROLLBACK;
dbms_session.close_database_link('temp_dblink');
EXECUTE IMMEDIATE 'drop database link temp_dblink';
END;
这当然不能“原样”,
你需要绑定“用户名”和“密码”,
需要为每个用户/尝试(网络会话)设置不同的 tmp_dblink 名称,
等等......
另请注意,这可能会在您的数据库中留下不需要的 dblink 等等
我不推荐使用这个解决方案
(我写它更多是为了它的运动......)