前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SAP HANA系列】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)

【SAP HANA系列】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)

原创
作者头像
matinal
修改2020-11-11 18:16:58
9630
修改2020-11-11 18:16:58
举报
文章被收录于专栏:SAP TechnicalSAP Technical

正文部分

前面几篇讲了SAP HANA XS JavaScript(JS)的基础内容和相应API,这篇讲一下JavaScript如何与后台交互,此篇讲存储过程(Procedures)。

从SAP HANA XS服务器端JavaScript(XSJS)调用存储过程,并使用JavaScript处理调用的结果。

XS程序提供了一种从XS服务器端JavaScript(XSJS)调用SAP HANA中的存储过程的方便方法,并使用JavaScript处理调用的结果。 XS程序库扩展了SAP HANA XS JavaScript数据库API中已有的功能。使用SAP HANA XS程序调用存储过程可以认为是开发XS JavaScript服务的任何简单XS JavaScript函数。

例如,在SAP HANA存储过程使用一个表作为输入参数和一个表作为输出参数,使用XS Procedures可以传递给该存储过程的JavaScript对象(或一组对象)。类似,存储过程调用的结果作为JavaScript对象的数组提供。将存储过程声明为XS JavaScript函数,然后调用存储过程,就像它是传递JavaScript对象的JavaScript函数一样。

要使用存储过程作为XS JavaScript函数,需要执行以下步骤:

使用引用现有表的参数调用过程,如果要将表作为参数传递而不是JavaScript对象,则必须在调用语句中指定表的名称(作为字符串)以及schema的名称。 以下示例显示如何引用表rating_table:

代码语言:javascript
复制
​
getRating('schema.rating_table', 3);

​

SAP HANA数据库能够实现存储过程调用的结果,也就是说,使用WITH OVERVIEW表达式将结果写入物理表。在WITH OVERVIEW表达式中,将字符串值传递给包含要实现的结果的输出参数位置。 返回的值不是本身,而是对已写入结果的表的引用。现在可以从指定的表中检索过程调用的结果,在本例中为OUTPUT_TABLE

代码语言:javascript
复制
​
var resCall = getRating(rating, 3, "schema.output_table"); 

​

WITH OVERVIEW表达式还允许将过程的结果写入全局临时表中, 也就是说,在会话关闭时被截断的表。要使用XS过程将过程的结果写入全局临时表中,则不指定结果表的名称,将包含一个空字符串(''),如以下示例所示:

代码语言:javascript
复制
​
var conn = $.db.getConnection();
resCall = getRating(rating, 3, '', conn); 

​

返回的引用指向全局临时表,可以使用相同的连接查询存储过程结果。为了确保访问全局临时表,有必要指定连接对象conn。

使用参数存储为表中的值来调用存储过程,如以下示例所示。使用与要传递的表的行对应的JavaScript数组来传递表值输入参数。这些行对象必须包含与列的名称对应的属性。 跳过的列填充为NULL,并且不符合相同命名列的属性将被忽略。

代码语言:javascript
复制
​
var XSProc = $.import("sap.hana.xs.libs.dbutils", "procedures");
XSProc.setTempSchema($.session.getUsername().toUpperCase());
var conn = $.db.getConnection();
var createPurchaseOrder = XSProc.procedure("SAP_HANA_DEMO",
 "sap.hana.democontent.epm.Procedures::poCreate", {
 connection: conn
 });
var result = createPurchaseOrder([{
 "PURCHASEORDERID": '0300009001',
 "HISTORY.CREATEDBY": '0000000044',
 "HISTORY.CREATEDAT": new Date(),
 "HISTORY.CHANGEDBY": '0000000044',
 "HISTORY.CHANGEDAT": new Date()
}]);
if (result && result.ERROR.length > 0) {
 $.response.setBody(result.ERROR.length + " errors occurred.");
} else {
 $.response.setBody("no error occurred");
}

​

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 正文部分
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档