公众号:SAP Technical
本文作者:matinal
 

前言部分

大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。

正文部分

前面几篇讲了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:


getRating('schema.rating_table', ); ​

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


var resCall = getRating(rating, , "schema.output_table"); ​

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


var conn = $.db.getConnection();
resCall = getRating(rating, , '', conn); ​

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

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


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 > ) {
$.response.setBody(result.ERROR.length + " errors occurred.");
} else {
$.response.setBody("no error occurred");
} ​

最新文章

  1. 为C# as 类型转换及Assembly.LoadFrom埋坑!
  2. .NET 4.5.1 预览版新特性
  3. OpenGL FrameBufferCopy相关Api比较(glCopyPixels,glReadPixels,glCopyTexImage2D,glFramebufferTexture2D)
  4. 基于密度聚类的DBSCAN和kmeans算法比较
  5. 【动态规划】bzoj1669 [Usaco2006 Oct]Hungry Cows饥饿的奶牛
  6. 14款让前端开发者心动的jQuery/CSS3插件及源码
  7. CentOS6.5上golang环境配置
  8. Hbase之插入数据
  9. BZOJ 2763: [JLOI2011]飞行路线 spfa dp
  10. 排序算法THREE:归并排序MergeSort
  11. 在线引用js资源积累
  12. 使用RESTful风格开发Java Web
  13. Linux基础命令第三天
  14. Visual Studio Code for mac 设置中文
  15. mysql语句-DDL语句
  16. logistic回归为什么要使用sigmoid函数
  17. 第五章 CSS常用属性笔记
  18. sqlserver数据库命名规则
  19. Snmp学习总结(六)——linux下安装和配置SNMP
  20. boost::asio::ip::tcp实现网络通信的小例子

热门文章

  1. pod denied问题
  2. 个人的web商城网站
  3. BZOJ 2946 [Poi2000]公共串 (二分+Hash/二分+后缀数组/后缀自动机)
  4. 自制centos6开机界面
  5. gtid 同步1050异常处理
  6. HDU 6038 - Function | 2017 Multi-University Training Contest 1
  7. 1、Socket通信
  8. jquery load() 方法 语法
  9. Jmeter(七)关联之JSON提取器
  10. Java集合框架之LinkedHashSet