Technology Blogs by SAP
Learn how to extend and personalize SAP applications. Follow the SAP technology blog for insights into SAP BTP, ABAP, SAP Analytics Cloud, SAP HANA, and more.
cancel
Showing results for 
Search instead for 
Did you mean: 

     对于使用SQLScript 的存储过程,SAP HANA提供了对存储过程的调试功能,即debug功能。当对一个存储过程进行调试时,这个存储过程中的代码将被顺序执行,而并不是按照实际的可能情况并行执行。因此在对存储过程进行调试时,只是为了验证逻辑的正确性,查看执行过程中变量的值,而并不能保证调试中的性能。

相关权限

     要对一个存储过程进行调试的用户必须具有相关的权限,才可以进行调试。所以必须先赋予相应的权限给此用户。

     对于进行调试 的用户,首先要有对此存储过程的CALL的权限,以及对存储过程所访问的对象(tableview)的SELECT的权限。然后,要有对此存储过程的DEBUG的权限。

     Object Privileges下选择相应的procedure,勾选DEBUG的权限。或者选择相应schemaDEBUG的权限,则可以对此schema下所有procedure或者calculation view DEBUG的权限。

     同样,也可以使用SQL语句进行授权。


GRANT DEBUG ON <procedure_name>  TO <user_name>;
GRANT DEBUG ON SCHEMA <schema_name> TO <user_name>;


调试design-time procedure

      对于在一个共享的project中的存储过程,你可以进行调试和分析。即对workspace中已经被提交和激活的一个.hdbprocedure或者.procedure文件进行调试。这是从HANA SPS6版本开始提出的功能。

     这样建立存储过程是创建相关的.hdbprocedure或者.procedure文件。这样的存储过程,实现方式和在catalog中建立的存储过程相同,可以使用catalog中的表格和视图,但必须提前赋予相关的权限。同样,当这个存储过程被激活(activate)后,会在指定的schema下,创建对应的存储过程,其命名方式如下<project_name>.<folder_name>::<procedure_name>

调试catalog procedure

     同样,你也可以调试和分析catalog中任意schema中的存储过程。即,包含所有runtime procedureAFL generated proceduredesign-time procedure所对应的的存储过程,或者是procedure template instance。这个功能是在HANA SPS7中新提出的功能。


调试步骤

对于catalog procedure

     切换到SAP HANA Developmentperspective,在Systems标签下找到要调试的存储过程。双击这个存储过程,或者右键选择“Open with SAP HANA Stored Procedure viewer”,则在SAP HANA Stored Procedure viewer中显示这个存储过程的定义。

对于design-time procedure

     SAP HANA Developmentperspective,可以在Project Explorer标签下双击打开要调试的存储过程的对应文件。则在Editor中打开这个文件,显示存储过程的定义。


2.切换到Debugperspective下,则可以在想要设置断点的语句处,点击左侧,设置断点。如下图所示:

     则在Breakpoints的标签下,可以查看到当前所设置的断点。可以查看断点所在的行,删除一个或多个断点,并且可以看到每个断点当前的状态:pendingvalid invalid

3.创建一个新的debug configuration来启动一个新的调试会话。

     在工具栏中点击,并选择“Debug Configurations”。为其命名,在“Procedure to Debug”中,选择“Catalog schema”或者“Local projects”,并选中所要调试的存储过程。点击“Apply”来保存设置。

 

     与此同时,可以在Input Parameters的标签下对于每个输入参数赋值。对于标量类型的输入参数,可以赋予一个具体的值。对于表类型的输入参数,则必须填入一个catalog中存在的物理表格。

     在Advanced标签下,还可以选择调试的执行方式:

  • All procedures in the call stack :所有嵌套的存储过程都以debug模式编译。
  • Procedures with breakpoints:只有有断点的存储过程以debug模式编译。

4.选择“Debug”来开始调试。则这个存储过程会在第一个断点处中止,点击F8来跳到下一个断点。

     Debug标签下可以看到当前调试会话的状态。

 

     并且可以在“Variable”标签下,查看当前断点处变量的值。对于表变量,可以右击选择“Open Data Preview”来预览数据。

调试 external session procedure

     同样,也可以分析和调试一个外部应用所调用的存储过程。对于这个存储过程已经提前设置好断点,而且要知道调用这个存储过程的connection IDHANA用户或者连接到HANA数据库并调用存储过程的HANA用户和外部应用的用户。

     用来调试的用户,除了拥有相关的DEBUG权限以外。还要在“Privilege on Users”的标签处,添加权限,勾选“ATTACH DEBUGGER”。则这个用户可以连接到其他用户的会话中,从而可以调试存储过程和查看数据。

   调试外部应用调用的存储 过程的debug configuration与其他情况的调试不同。如图,在“General”标签下,选择“Debug an external session”。选定要调试的“SAP HANA System”。

  • Set filter attribute

     如果已知外部连接所使用的HANA用户,则可以使用这个方式。同时,也可以提供外部应用的用户。这是情况下,debug session开始前,调用存储过程的外部连接不一定开始建立。

  • Select a connection after initiating the debugger

     如果知道外部应用连接到HANA数据库的connection ID,则可以使用这种方式。这种情况下,你可以在debug session开始后,选定自己指定的某个连接。因此,在debug session开始前,调用存储过程的外部连接必须已经建立。

     则在开始debug session后,在外部应用中触发存储过程的调用。

     与其他调试请况相同,这时存储过程会在第一个断点处中止。可以查看当前调试会话的状态,变量值等信息。可以使用F8跳到下一个断点处。调试的方法与上面介绍的相同。

     想获取更多SAP HANA学习资料或有任何疑问,请关注新浪微博@HANAGeek!我们欢迎你的加入!转载本文章请注明作者和出处<http://scn.sap.com/community/chinese/hana/blog/2014/06/16/sap-hana%E4%B8%AD%E8%B0%83%E8%AF%95%E5%AD%...>,请勿用于任何商业用途。

5 Comments