TNHDB0002HANA存储过程说明Word格式.docx
《TNHDB0002HANA存储过程说明Word格式.docx》由会员分享,可在线阅读,更多相关《TNHDB0002HANA存储过程说明Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
LANG>
}{SQLSECURITY<
MODE>
}
{READSSQLDATA{WITHRESULTVIEW<
view_name>
}}AS
BEGIN
...
END
来源于《HA300_EN_Col97_FV_Show.pdf》第150页
<
是指存储过程执行的语句,主要是SQLScript、L或者是R语言,如果不指定,则默认SQLscript
是指definer和invoker,及定义者权限和调用者权限
READSSQLDATA定义存储过程为read-only
WITHRESULTVIEW是用于创建一个可用于sql语句的columnview,其数据集内容为存储过程的表类型输出参数所包含的数据集。
以下是创建实例
/*创建表类型CUSTOMER*/
CREATETYPE"
HNSD"
."
CUSTOMER"
ASTABLE("
CODE"
INTCS_INT)
/*创建存储过程ProcWithResultView,输出视图为ProcView*/
CREATEPROCEDUREProcWithResultView(INidINT,OUTo1CUSTOMER)
LANGUAGESQLSCRIPTREADSSQLDATA
WITHRESULTVIEWProcView
AS
BEGIN
o1=SELECT:
idasCODEFROMDUMMY;
END;
需要注意的是输入参数可以为基本类型和自定义table类型,输出参数可以为基本类型和自定义table类型,如果定义了resultView,则输出参数必须是table类型,并且该table类型已经定义完成。
执行创建sql后,存储过程将保存目录如下
1.2.创建向导
按下图打开存储过程创建向导
如上图所示,在创建页面有如下属性
Name:
存储过程名称
Description:
存储过程描述
DefaultSchema:
默认的Schema名称,建议选择用户所属的Schema,这个关系着在_SYS_BIC中的存储过程名称
RunWith:
Definer定义者权限,Invoker调用者权限,定义者权限将会限制其他用户调用该存储过程,调用者权限将允许系统向其他用户授权调用该存储过程。
AccessMode:
ReadOnly,Read-Wirter,但是在现使用studio中不可选
Language:
SQLScript,L,R,但是在现使用studio中不可选
如下图,为存储过程的脚本编辑视图
在向导创建存储过程中,输入参数可以为基本类型和自定义table类型,而输出参数必须为自定义table类型,并且该table类型无需预先定义,而是在参数定义栏中进行设置,在存储过程saveandvalidate过程中自动创建
创建完成后,保存目录如下
同时在_SYS_BIC下会生成如下对象
2.调用
2.1.SQLeditor
在SQLCONSOLE中调用方式如下
另外,如果定义了resultview,可以直接在sql语句中调用
SELECT*FROMProcViewWITHPARAMETERS('
placeholder'
=('
$$id$$'
'
3'
))
在存储过程中调用方式如下
tmp是存储过程中使用的临时参数,用于接收调用存储过程的输出结果集,然后该结果集可以在sql中直接调用。
该方式在saveandvalidate中报错,错误显示权限不足,原因尚未明确
在计算视图中调用
由上可以看出,计算视图实际上和存储过程类似,语法和结构都比较相近。
2.2.创建向导
在SQLCONSOLE中的调用方式如下
在向导中创建的存储过程,无法直接被调用,只能是调用_SYS_BIC中的生成对象,同时因为无法定义resultview,所以无法直接在sql中被调用
3.两种方式的区别和相同
●我们从存储过程的CreateStatement来分析这两种方式的相同和不同之处
SQLEditor
创建向导
从以上创建语句来看,两种方式的存储过程没有区别,脚本语法都是一致的。
从存储过程创建方式来分析,对比如下
功能
输入参数
可以为基本类型、自定义TABLE类型
相同
输出参数
只能为自定义TABLE类型
LANGUAGE
SQLSCRIPT,L,R
SQLSECURITY
definer,invoker
READSSQLDATA
Readonly
WITHRESULTVIEW
可以定义columnview
没法定义
修改
没法修改,只能drop、create
可以修改后重新active
4.动态SQL
4.1.动态SQL介绍
来源于《HA300_EN_Col97_FV_Show.pdf》第171页
4.2.动态SQL语法
4.3.动态SQL相关
根据介绍,动态SQL的执行结果无法与SQLScript变量绑定,也就是说如下语句是不合法的
另外,在创建向导所创的存储过程中,似乎无法使用动态SQL,如下面语句
报错信息为
5.条件&
循环
5.1.IF
5.2.WHILE
5.3.FOR