我的HANA数据库上有一个存储过程,我需要从不同的模式中连接两个表。这些模式在开发,登台和生产系统中的命名方式不同。
在这种情况下,显而易见的解决方案是使用Schema-Mapping。但遗憾的是,模式映射似乎只适用于存储过程的默认模式。尝试在存储过程(例如JOIN "AUTHORING_SCHEMA"."SOME_TABLE" ON ...
)中引用创作架构时,您会收到错误消息"无效的架构名称"。因此,似乎我只能对其中一个表使用模式映射,但不能同时使用这两个表。
我知道我可以通过查询表"_SYS_BI"."M_SCHEMA_MAPPING"
来读取存储过程中的模式映射,但是当我在变量中有模式名称时,我无法找到如何从模式进行查询。
答案 0 :(得分:2)
我会试着通过使用.hdbsynonym
定义两个同义词来解决这个限制有关如何使用.hdbsynonym检查https://help.sap.com/saphelp_hanaplatform/helpdata/en/52/78b5979128444cb6fffe0f8c2bf1e3/content.htm和https://help.sap.com/saphelp_hanaplatform/helpdata/en/4c/94a9b68b434d26af6d878e5f51b2aa/content.htm
创建设计时间同义词的详细信息在那里,您还可以找到有关模式映射如何与hdbsynonym一起使用的说明。
有关同义词的详细信息,请参阅https://blogs.sap.com/2016/12/05/using-synonyms-in-sap-hana/
答案 1 :(得分:0)
我用一种解决方法解决了这个问题,我并不完全满意,但现在可以使用。
我创建了第二个存储过程,第二个模式作为默认模式。此过程除了SELECT
第二个数据库表的内容外什么都不做。
第一个存储过程调用第二个存储过程将数据加载到本地表变量中,然后在第一个数据库表和表变量之间执行JOIN
。
这样做效果相当不错,因为第二个表格相当小(目前有16行,不可能超过100行)。但我不想用更大的桌子来做。