NevemTeve Creative Commons License 2024.11.28 0 0 5709

Mondjuk jön egy parancs, hogy describe x@dblink_itt, ahol az x-ben nincs pont.

Először a user_objects@dblink_itt-ben keresünk, ahol object_name='X'

Ha nincs találat, akkor megpróbálhatjuk ezt:

select * from user_db_links@dblink_itt where db_link=regexp_replace(sys.database_name@dblink_itt, '^[^.]+(..*|)$', 'X1'));

 

Ha az a feladat, hogy describe x.y@dblink_itt, akkor először
select * from all_objects@dblink_itt where owner='X' and object_name='Y';

Második esélyként:
select * from user_db_links@dblink_itt where db_link='X.Y';

 

Namostan akarunk-e más userek dblink-jéről információt adni? (Az Sql*Plus nem tekinthető mintának, mert az semmilyen dblink-ről nem ad semmilyen információt). Ha igen, akkor még lehet ezek valamelyike:
select * from all_db_links@dblink_itt where owner='X' and db_link='Y';

select * from all_db_links@dblink_itt where owner='X' and db_link=regexp_replace(sys.database_name@dblink_itt, '^[^.]+(..*|)$', 'Y1'));

Ha ezt mind megvan, akkor már csak a PUBLIC dblink-ekkel kell foglalkozni, valahogy úgy, ahogy a PUBLIC szinonímákkal, hogy pl. `describe dual`

1. select * from user_objects where OBJECT_NAME='DUAL'; Nincs találat
2. select * from all_synonyms where OBJECT_NAME='DUAL' AND OWNER='PUBLIC'; Van találat, kiderül, hogy owner='SYS'
3. select * from all_objects where OBJECT_NAME='DUAL' AND OWNER='SYS'; És már célba is értünk.

Előzmény: NevemTeve (5708)