HANA 存储过程
You can develop secure procedures using SQLScript in SAP HANA by observing the following recommendations.
- Mark each parameter using the keywordsINorOUT. Avoid using theINOUTkeyword.
- Use theINVOKERkeyword when you want the user to have the assigned privileges to start a procedure. The default keyword,DEFINER, allows only the owner of the procedure to start it.
- Mark read-only procedures usingREADS SQL DATAwhenever it is possible. This ensures that the data and the structure of the database are not altered.
Tip Another advantage to usingREADS SQL DATAis that it optimizes performance.
- Ensure that the types of parameters and variables are as specific as possible. Avoid usingVARCHAR, for example. By reducing the length of variables you can reduce the risk of injection attacks.
- Perform validation on input parameters within the procedure.
我是说HANA ,为什么每次后面都加那么一大串。 language sqlscript sql security definer reads sql data
这个可以直接创建的SQL窗口里写也行。不用那么麻烦。
我都不知道这下面这个什么意思。奇奇怪怪的没明白LOGIC。 很可能是随便复制的。
), OUT var_out "_SYS_BIC"."DEMO/DEMO_SQL_CV/proc/tabletype/VAR_OUT" ) language sqlscript sql security definer reads sql data
as
/********* Begin Procedure Script ************/
BEGIN
SELECT CURRENT_DATE,"_BIC_Z0CGDDH" AS DATE_V FROM "_SYS_BIC"."DEMO/DEMO_CV_IP"
where "_BIC_Z0CGDDH"= 'ZCCG-1403270935500D';
var_out =
SELECT
A."/BIC/Z0CGDDH" AS CGDDH,
A."/BIC/Z0DDZT" AS DDZT,
B."/BIC/Z0SL" AS SL,
B."/BIC/Z0JE" AS JE
FROM "SAPABAP1"."/BIC/AZEZJTO0100" A LEFT JOIN
"SAPABAP1"."/BIC/AZEZJTO0200" B ON A."/BIC/Z0CGDDH"=B."/BIC/Z0CGDDH"
WHERE B."/BIC/Z0JE" IS NOT NULL
AND A."/BIC/Z0CGDDH" IN(:IP_CGDDH)
;
END /********* End Procedure Script ************/
权限过滤,有空看看。
) , MD5_CODE ) , OUT AUTH_VALUE ) )
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
--DEFAULT SCHEMA <default_schema_name>
READS SQL DATA AS
BEGIN
/*****************************
Write your procedure logic
*****************************/
--根据MD5码 得到值列表。
) ;
--7380563cdbb1061c70bc76c19ef6d9a2
DECLARE CURSOR c_cursor FOR
select * from "SAPABAP1"."/BIC/OHZBWOHD2" where "USERNAME_MD5" = :MD5_CODE and
FILTER_COLOMN = :AUTH_IOBJ ORDER BY "VALUE_LOW" asc ;
val:= '';
FOR r1 AS c_cursor DO
--val:= :val || '''' || '''' || r1.VALUE_LOW || '''' || '''' || ',';
val:= :val || '''' || r1.VALUE_LOW || '''' || ',';
IF r1.VALUE_LOW = '*' THEN
val:= '''' || '*' || '''';
BREAK ;
END IF ;
END FOR;
-- AUTH_VALUE := :val ;
select RTRIM (:val,',') INTO AUTH_VALUE from dummy;
--AUTH_VALUE := :val || '''' ;
CLOSE c_cursor;
END;
这是一个权限判断的存储过程。想必还是有用,也没看懂。
) , ZIP_MD5 ) ,ZIP_IOBJ ) ,
OUT VAR_OUT ) , OUT VAR_FLAG ))
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
--DEFAULT SCHEMA <default_schema_name>
READS SQL DATA AS
BEGIN
/*****************************
Write your procedure logic
*****************************/
;
;
;
) ;
);
------------------------------------------------------------------------------------
;/* Custom Error Code = 10001*/
/*User Defined exception handler */
DECLARE EXIT HANDLER FOR CUSTOMCONDITION RESIGNAL;
--SELECT ::SQL_ERROR_CODE AS "Error Code", ::SQL_ERROR_MESSAGE AS "Error Message" FROM DUMMY;
/*权限检查段,根据输入的MD5获取权限值*/
------------------------------------------------------------------------------------
SCONST := '''' || '*' || '''';
VAR_OUT := '';
call "_SYS_BIC"."Purchase::ZAUTH_DYN_FILTER"(:ZIP_IOBJ,:ZIP_MD5,:SVAR);
IF :SVAR = '' THEN
SIGNAL CUSTOMCONDITION SET MESSAGE_TEXT = '^_^权限不足,请联系管理员增加权限!^_^';
return;
END IF;
IF :AUTH_IP = '' OR :AUTH_IP = :SCONST THEN
VAR_OUT := :SVAR ;
ELSE
/*对比用户输入和存储过程查到的数据*/
IF :SVAR = :SCONST THEN VAR_OUT := :AUTH_IP;
ELSE
AUTH_IP := :AUTH_IP || ',';
DO
ENO := LOCATE(:AUTH_IP , ',',:SNO) ;
FLAG := LOCATE(:SVAR , SUBSTRING(:AUTH_IP , :SNO , :ENO-:SNO)) ;
THEN
SIGNAL CUSTOMCONDITION SET MESSAGE_TEXT = '^_^权限不足,请联系管理员增加权限!^_^';
return;
END IF;
SNO : ;
END WHILE;
select RTRIM (:AUTH_IP,',') INTO VAR_OUT from dummy;
END IF;
END IF ;
IF :VAR_OUT = :SCONST THEN
VAR_FLAG := '%' ;
END IF ;
END;
HANA 存储过程的更多相关文章
- 【HANA系列】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS使用Jav ...
- 【HANA系列】【第六篇】SAP HANA XS使用JavaScript(JS)调用存储过程(Procedures)
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列][第六篇]SAP HANA XS ...
- HANA SQLScript
数据类型 日期时间类型 DATE(日期) DATE 数据类型由年.月.日信息组成,表示一个日期值. DATA 类型的默认格式为‘YYYY-MM-DD’. YYYY 表示年, MM 表示月而 DD 表示 ...
- HANA SQL
约束 注释 你可以给你的 SQL 语句添加注释来增加可读性和可维护性. SQL 语句中注释的分隔如下: l 双连字符“--”.所有在双连字符之后直到行尾的内容都被 SQL 解析器认为是注释. l ...
- SAP HANA 中的决策表(Decision Table)
http://scn.sap.com/community/developer-center/hana/blog/2013/01/11/what-can-you-do-with-decision-tab ...
- SAP HANA procudure 创建用户
SAP HANA中的用户是没有功能进行直接的拷贝的,但是我们可以通过建立存储过程调用,通过sql语句的方式进行拷贝: 存储过程定义如下,各位可根据自己的需求进行修改: CREATE PROCEDURE ...
- 【公众号系列】SAP HANA 平台的优势
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]SAP HANA 平台的优势 ...
- 【公众号系列】超详细SAP HANA JOB全解析
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[公众号系列]超详细SAP HANA JOB全解 ...
- 【HANA系列】SAP HANA XS的JavaScript API详解
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA XS的Java ...
随机推荐
- 我的Android进阶之旅------>修改Android签名证书keystore的密码、别名alias以及别名密码
转载于:http://blog.k-res.net/archives/1229.html 和 http://blog.k-res.net/archives/1671.html ADT允许自定义调试用 ...
- 一起talk C栗子吧(第七十八回:C语言实例--创建进程)
各位看官们,大家好.上一回中咱们说的是DIY ls命令续的样例.这一回咱们说的样例是:创建进程.闲话休提.言归正转. 让我们一起talk C栗子吧! 看官们.关于进程的概念,我们简单做个简单的介绍:进 ...
- Redis分布式锁的python实现
案例1: #!/usr/bin/env python # coding=utf-8 import time import redis class RedisLock(object): def __in ...
- 1.7 使用电脑测试MC20的发送带中文的短信功能
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- 剑指offer 面试27题
面试27题: 题目:二叉树的镜像 题:操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / ...
- docker学习笔记1-- 用Toolbox安装Docker--介绍Docker Machine
使用的是Docker Toolbox,非Docker for Windows 一.docker的认识与安装(windows安装) http://blog.csdn.net/tina_ttl/artic ...
- UI控件之UINavigationController
ViewController1 *vc1=[[ViewController1 alloc]init]; UINavigationController *nav1=[[UINavigationContr ...
- mysql 触发器 存储过程 java调用
触发器和存储过程是为了提高SQL的运行效率. SQL语句先编译.后执行,而触发器与存储过程都会提前预编译完成,且只编译一次,供反复调用. 随着时代的进步,硬件与带宽的提升,触发器和存储过程提升效率并不 ...
- JS兼容各个浏览器的本地图片上传即时预览效果\、
在firefox\chrome\ie10等浏览器中可以使用HTML5中的内容实现图片即时预览效果,在IE10以下浏览器中使用滤镜来解决图片显示问题. HTML5中的FileReader对象主要是把文件 ...
- matplotlib模块之子图画法
一般化的子图布局 首先要创建各个子图的坐标轴,传入一个四元列表参数:[x,y,width,height],用来表示这个子图坐标轴原点的x坐标.y坐标,以及宽和高.值得注意的是,这四个值的取值范围都是[ ...