如上所述,模式/库列表用于解析函数/过程名称,而不是表。
假设您需要从 lib1.tab1 和 lib2.tab2 读取数据;
这是我个人的解决方法(从简单到复杂):
a)要求数据库管理员拥有 - 对于您需要使用的每个表 - 相应的模式名称,然后执行“select * from lib1.tab1 join lib2.tab2 on [...]”;-) b)询问数据库管理员在架构“MyAlias”上为您要使用的每个表创建多个别名(创建别名)。然后执行“set current schema=MyAlias”,然后执行您需要的所有 SQL 语句,例如“select * from tab1 join tab2”。由于您正在查询 myalias.tab1 ,它是指向表 lib1.tab1 的别名,它应该可以工作。
c) 复杂:创建您自己的 SQL 函数,该函数返回表的相应 schema_name(例如 myfunct('TAB1')。这可以通过读取系统视图“qsys2.systables” where table_name='TAB1' 并返回 TABLE_SCHEMA 列来完成,即是一个varchar(128)。一旦你得到它,使用你刚刚获得的变量建立一个动态准备。例如“set mylib = myfunct('TAB1')。”set mystmt = 'select * from '||table_schema || '.tab1' ...”</p>
准备 mystmt 然后执行 mystmt。
我在 VBA 中使用 ado ibmdrda 做了类似的事情,它奏效了。
希望这可以帮助。
F。