当您有多个架构时,如何在存储过程中使用架构映射?

时间:2016-12-29 13:07:28

标签: stored-procedures hana hana-sql-script

我的HANA数据库上有一个存储过程,我需要从不同的模式中连接两个表。这些模式在开发,登台和生产系统中的命名方式不同。

在这种情况下,显而易见的解决方案是使用Schema-Mapping。但遗憾的是,模式映射似乎只适用于存储过程的默认模式。尝试在存储过程(例如JOIN "AUTHORING_SCHEMA"."SOME_TABLE" ON ...)中引用创作架构时,您会收到错误消息"无效的架构名称"。因此,似乎我只能对其中一个表使用模式映射,但不能同时使用这两个表。

我知道我可以通过查询表"_SYS_BI"."M_SCHEMA_MAPPING"来读取存储过程中的模式映射,但是当我在变量中有模式名称时,我无法找到如何从模式进行查询。

2 个答案:

答案 0 :(得分:2)

我会试着通过使用.hdbsynonym

定义两个同义词来解决这个限制

有关如何使用.hdbsynonym检查https://help.sap.com/saphelp_hanaplatform/helpdata/en/52/78b5979128444cb6fffe0f8c2bf1e3/content.htmhttps://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行)。但我不想用更大的桌子来做。