第一次写博客,要是写的不好 请大家多多见谅!下面是我学习hana 存储过程时的一些总结 希望能与大家探讨一番

如果有错误的 希望各位能指出 我会修订好的

1. table_type

1.1 自定义table_type 
Synatx:
CREATE TYPE <type_name> AS TABLE (<column_definition>[{,<column_definition>}...])
 Example:
      CREATE TYPE tt_publishers AS TABLE (
publisher INTEGER,
name VARCHAR(50),
price DECIMAL,
cnt INTEGER);
1.2 删除table_type
 Synatx:
   DROP TYPE <type_name> [<drop_option>]  
         当drop_option没有被指定,将执行无级联删除。这只会删除指定内容的类型,依赖对象只会失效而不会被删除。当创建相同的模式和对象的名称时,可以使失效的依赖对象重新有效。
  Example:
CREATE TYPE my_type AS TABLE ( column_a DOUBLE );
DROP TYPE my_type;
2. Procedure
2.1 与纯粹的sql语句相比 存储过程的性能优于前者。并且存储过程简化了查询常见子表达式的步骤,并且提高了SQLScript的可读性。
2.2 “:”后面跟着的是变量 例如:A  说明A是一个变量
2.3 创建存储过程
Synatx:
CREATE PROCEDURE <proc_name> [(<parameter_clause>)] [LANGUAGE <lang>] [SQLSECURITY <mode>] [DEFAULT SCHEMA <default_schema_name>]
[READS SQL DATA [WITH RESULT VIEW <view_name>]] AS
BEGIN [SEQUENTIAL EXECUTION]
<procedure_body>
END

READS SQL DATA可以用于优化。
Example:
One:使用了游标的存储过程
CREATE PROCEDURE orchestrationProc
LANGUAGE SQLSCRIPT AS
BEGIN
DECLARE v_id BIGINT;
DECLARE v_name VARCHAR(30);
DECLARE v_pmnt BIGINT;
DECLARE v_msg VARCHAR(200);
DECLARE CURSOR c_cursor1 (p_payment BIGINT) FOR
SELECT id, name, payment FROM control_tab
WHERE payment > :p_payment ORDER BY id ASC;
CALL init_proc();
OPEN c_cursor1(250000);
FETCH c_cursor1 INTO v_id, v_name, v_pmnt; v_msg := :v_name || ' (id ' || :v_id|| ') earns ' || :v_pmnt || ' $.'; 
----此处 | | 是字符串的拼接 拼接完成后 赋值给v_msg 然后在下面的ins_msg_proc当做参数
CALL ins_msg_proc(:v_msg);
CLOSE c_cursor1;
END;

Two:只读型存储过程
CREATE PROCEDURE ProcWithResultView(IN id INT, OUT o1 CUSTOMER)
LANGUAGE SQLSCRIPT
READS SQL DATA WITH RESULT VIEW ProcView AS
BEGIN
o1 = SELECT * FROM CUSTOMER WHERE CUST_ID = :id;
END;

2.4 删除存储过程
 Synatx:
DROP PROCEDURE <proc_name> [<drop_option>]
跟删除表类型一样,当drop_option没有被指定,将执行无级联删除。这只会删除指定内容的类型,依赖对象只会失效而不会被删除。当创建相同的模式和对象的名称时,可以使失效的依赖对象重新有效。
Example:
DROP PROCEDURE my_proc;
2.5 修改存储过程
 Synatx:
  ALTER PROCEDURE <proc_name> RECOMPILE [WITH PLAN]
Example:
ALTER PROCEDURE my_proc RECOMPILE WITH PLAN;
    建议:一般项目中对存储过程进修改的话 是对其drop 然后在create 然后在create中修改相应的部位
2.6 使用存储过程
 Synatx:
  CALL <proc_name> (<param_list>) [WITH OVERVIEW]
   给存储过程传递参数(参数为标量、常量) 可以通过IN、OUT、INOUT。
  WITH OVERVIEW ---存储过程调用的结果将直接存储到一张物理表中。
 Example:
  在调试模式中调用存储过程
   CALL getOutput (1000, 'EUR', NULL, NULL) IN DEBUG MODE;
  使用带有预览选项的方法调用存储过程
   CALL getOutput(1000, 'EUR', ot_publishers, NULL) WITH OVERVIEW;
2.7 内部存储过程调用
Note(注意):请注意在标识符前面使用”:”。
Synatx:
CALL <proc_name > (<param_list>)
Example:
CALL  addDiscount (:lt_expensive_books, lt_on_sale);
addDiscount这个存储过程是个内部存储过程
:lt_expensive_books 是外部存储过程的变量 但是因为有“:”代表对其取值,所以将其作为输入参数传入。 lt_on_sale也是外部存储过程的变量但是没有“:”代表没有对它取值,所以作为输出参数传出
2.8 调用存储过程命名参数(通过令牌 =>)
 Example:
  CALL myproc (i => 2) 
  Complete Example:
           DROP TYPE mytab_t
drop table mytab
drop procedure myproc

create type mytab_t as table (i int);

create table mytab (i int);
insert into mytab values (0);
insert into mytab values (1);
insert into mytab values (2);
insert into mytab values (3);
insert into mytab values (4);
insert into mytab values (5);

create procedure myproc (in intab mytab_t,in i int, out outtab mytab_t) as
begin
outtab = select i from :intab where i > :i;
end;
          :i指的是存储过程中的参数i 而前者i指的是intab表类型中的i
call myproc(intab=>mytab, i=>2, outtab =>?);
2.9 存储过程参数格式类型
     IN:输入参数
     OUT:输出参数
     INOUT:既可以将数据传入 也可以将数据输出
2.10 为参数设定系统默认值(default)
    Example:
CREATE PROCEDURE MYPROC(IN P1 INT, IN P2 INT DEFAULT 1, OUT out1 DUMMY) AS
BEGIN
out1 = SELECT :P1 + :P2 AS DUMMY FROM DUMMY;
END;
Note:使用 => 赋值使用
Example:
CALL MYPROC(3, 4,?);
Or
CALL MYPROC(P1 => 3, out1 => ?)
2.11 用户自定义功能概念(只读模式 所以安全性好)
One:table function
  输入参数数据类型:表类型和原始数据类型
  输出参数数据类型:返回一张在<return type>中定义过类型的表
 默认情况下,该函数被标记为只读模式
Two:scalar function
  输入参数数据类型:原始数据类型
输出参数数据类型:必须返回在<return_parameter_list>中指定的标量的值
默认情况下,该函数被标记为只读模式
2.12 创建自定义功能
     Synatx:
      CREATE FUNCTION <func_name> [(<parameter_clause>)] RETURNS <return_type> [LANGUAGE<lang>] [SQL SECURITY <mode>]
       AS
       BEGIN
       <function_body>
       END
Example:
 
2.13 删除自定义功能
     Synatx:
      DROP FUNCTION <func_name> [<drop_option>]
Note:<drop_option> ::= CASCADE | RESTRICT
如果<drop_option>定义为 CASCADE 删除function的同时还会删除依赖对象
如果<drop_option>定义为RESTRICT 只能在无依赖对象的时候使用 如果存在依赖对象 还定义RESTRICT 则会抛出错误
      Example:
        DROP FUNCTION my_func;
2.14 不支持的SQL函数
目前在SQLScript过程和用户定义函数中不支持一下SQL函数
  
3. 声明SQLScript逻辑
3.1  
Note:从过程中产生的存储过程和结果视图不连接在安全透视图中,因此不继承彼此的特权。每个对象的安全方面必须单独处理。例如,您应该在一个结果视图中授予SELECT特权,并在一个连接的存储过程中执行特权。
3.2 表变量
表变量是具有表类型的变量,也就是说它们与物理表、SQL查询或计算引擎计划操作符的值绑定在一起。表变量也可以用于像in或OUT变量这样的过程的签名。当一个存储过程被调用时,一个表变量绑定到列表值,而在参数上的列表是绑定到它的参数值的。另一种选择是在一个存储过程的主体中,当一个表表达式被绑定到一个使用赋值的变量时。在输入和输出参数时必须显式地输入,在存储过程中,一个程序的主体的表变量的类型来自于它们绑定到存储过程的编译时的表达式
3.3 表变量的绑定
表变量的使用相当于绑定运算符操作,且由于中间结果赋值或调用其他函数所导致的循环依赖关系是不允许的,也就表明递归是不存在的
3.4 引用变量
Note:在优化的过程中,未使用结果的语句将会被删除。
3.5 列视图参数绑定 
 Synatx:
  SELECT * FROM <column_view> ( <named_parameter_list> );
使用列视图参数绑定 可以将参数从存储过程/脚本计算视图传递到参数化列视图中
Example1:
 
Example2:
 
方法使用:
 

HANA 存储过程 基础篇相关推荐

  1. 【SAP Hana】X档案:SAP HANA SQL 基础教程

    SAP HANA SQL 基础教程 1.SQL 标准简介 2.HANA STUDIO 的安装 3.HANA STUDIO 的设置 4.HANA SQL 基础教程 (1)查看表数据 (2)查看表结构 ( ...

  2. 存储过程while_超详细的Oracle存储过程基础入门介绍

    概述 前面已经对存储过程.函数.包做了个介绍,但是毕竟是写成了一篇,所以没那么细,今天单独介绍一下存储过程基础方面,后面再说遍历什么游标啊,数组啊~ 1.语法 CREATE [OR REPLACE] ...

  3. (一)mysql 运维基础篇(Linux云计算从入门到精通)

    学习预览: (一)mysql 运维基础篇(Linux云计算从入门到精通) (二)mysql 索引和视图(数据库运维基础补充) (三)mysql 触发器.存储过程和函数(数据库运维基础补充) (四)My ...

  4. php杂谈【基础篇】之_7.PHP涉及的所有英文单词

    php杂谈[基础篇]之_7.PHP涉及的所有英文单词 拦路虎 PHP再火,也会让一部同学心生畏惧,因为看到编辑器中那一串串英文单词,担心自己英文不好,从而对能学会PHP的决心产生动摇.其实大可不必,英 ...

  5. 最全MySQL基础篇

    文章目录 导入表的问题 第三章_最基本的SELECT语句 1. SQL语言的规则和规范 1) 基本规则 2) SQL大小写规范(建议遵守) 3) 注释 4) 命名规则 2. 基本的SELECT语句 1 ...

  6. 数据库应用程序开发基础篇—— .NET中SQL Server数据库的操作C#篇之一

    数据库应用程序开发基础篇-- .NET中SQL Server数据库的操作C#篇之一 写在前面:前面介绍了数据库系统的基本概念,SQl语句基本使用方法,接下来通过学习具体语言和具体数据库结合的应用开发来 ...

  7. Oracle、Mysql数据库编程开发基本操作命令语法脚本_基础篇(入门级)

    Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 文章目录 Oracle.Mysql数据库开发基本操作命令语法脚本_基础篇(入门级) 一.数据库中常用的字段类型 二.操作数据库 ...

  8. 剖析SQL Server 2005查询通知之基础篇

    剖析SQL Server 2005查询通知之基础篇 注:这是本人转载的文章. 摘要 在本系列文章中,我们将深入探讨如何把.NET 2.0和SQL Server 2005的查询通知特征联合起来,以便通知 ...

  9. ABAP项目砖家之旅-基础篇

    ABAP项目砖家之旅-基础篇 前言 一.ABAP简介 二.ABAP开发工具 1.SAPgui 2.eclipse和HANA studio 三.相关搬砖经验 1.必须还是熟悉语法 2.复制粘贴写注释 3 ...

最新文章

  1. Android studio怎么找到当前文件在电脑路径位置
  2. 世界上公认最难的十大学科
  3. java 线程分配_Java多线程原子引用分配
  4. 【Java】类加载过程
  5. 相机内外参矩阵和坐标变换
  6. cocoapods-安装
  7. 产品经理和开发打起来了
  8. python中颜色_python - matplotlib中的命名颜色
  9. java编程思想(注释文档)
  10. C语言最新学习路线(从入门到实战)
  11. Uchome分页方法
  12. Python编程案例:中文金额转换并计算
  13. bert做文本摘要_BERT文本摘要
  14. 现代大学英语精读第二版(第二册)学习笔记(原文及全文翻译)——3B - What My Garden Taught Me—the Hard Way(园艺给我的教训——历经磨难才学会)
  15. 剥洋葱 习题10-8 递归实现顺序输出整数 (15分)
  16. python制作七夕礼物_OpenCV+Python制作程序七夕(情人节)礼物
  17. 数据预处理——归一化标准化
  18. TensorFlow进行多元线性回归
  19. android开发过程中遇到的问题
  20. 高德地图API行政区域查询

热门文章

  1. Kindle所不为人知的一面
  2. The import com... cannot be resolved
  3. IBM开源4.4万行blockchain代码,推动区块链物联网商用开发
  4. 2019_ICDM_DeepTrust: A Deep User Model of Homophily Effect for Trust Prediction
  5. 设计师可以投资3D渲染的 5 种方式
  6. R语言向量误差修正模型 (VECMs)分析长期利率和通胀率影响关系
  7. 铝电解电容器在组件安装时的注意事项-源头厂家-军工品质
  8. 微信小程序 局域网内TCP意外断开后重连
  9. Ardupilot飞控Mavlink代码学习
  10. modem的来电显示功能