声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4293506.html

Native SQL允许你针对数据库来使用原生的SQL,这些SQL可能是标准的SQL,也可以是某数据库特定的SQL。如果使用database-specific SQL语句,则数据库不能更换,否则请使用Open SQL。

本地SQL会绕过R/3 database interface,操作时不会记录日志,不会同步应用服务器上的database buffer。另外,使用ABAP Dictionary定义的类型为LCHR or LRAW的长列时,这些列需要使用Open SQL来读取,因为读取这些字段时,还需要使用另外存储此类型长列的长度信息,才能准确读出。最后,本地SQL是不会自动能客户端字段MANDT字段进行处理,该字段会像普通字段那样对待。

为了事务的一致性,在本地SQL中不要使用事务控制的语句(如COMMIT, ROLLBACK WORK),以及事务设置语句(如级别设置)

普通SQL

EXEC SQL [PERFORMING <form>].
<Native SQL statement>[;]

ENDEXEC.

Native SQL statement后面的分号是可选的,但不能是“.”

如果Native SQL 是一个从表里SELECT statement时,你可以通过PERFORMING选项的<form>里来一行行读取,如果不需要处理返回结果,或者是UPDATE、DELETE语句时,可以省略选项。

在ENDEXEC执行完后,SY-DBCNT存储了处理的数据行数。在几乎所有情况下,在执行ENDEXEC 后,SY-SUBRC都会为0,但是

DATA: BEGIN OF wa,
  connid TYPE spfli-connid,
  cityfrom TYPE spfli-cityfrom,
  cityto TYPE spfli-cityto,
END OF wa.
DATA c1 TYPE spfli-carrid VALUE 'LH'.

"Native SQL语句不能以句点号结尾;

"不能在EXEC SQL…ENDEXEC间有注释,即不能有星号与双引号的出现;

"另外还要注意数据库系统大小写是否敏感;

"参数占位符使用冒号,而不是问号;
EXEC SQL PERFORMING loop_output.
  SELECT connid, cityfrom, cityto
    INTO :wa
    FROM spfli
    WHERE carrid = :c1
ENDEXEC.
FORM loop_output.
  WRITE: / wa-connid, wa-cityfrom, wa-cityto.
ENDFORM

或者将上面的INTO :wa替换为:

INTO :wa-connid ,:wa-cityfrom ,:wa-cityto

也可以。

调用存储过程

EXECUTE PROCEDURE<name> ( <parameter list> )

参数以逗号分隔,并需要IN、OUT 来指定是输入还是输出参数,或者是使用INOUT来表示即是输入也是输出参数

EXEC SQL.
  EXECUTE PROCEDURE proc1 ( IN :x, OUT :y )
ENDEXEC.

游标处理:

•OPEN<cursor name>FOR<statement>

•FETCH NEXT <cursor name>INTO<target(s)>.

•CLOSE<cursor name>

.
    EXIT.
  ELSE.
    WRITE: / t001-mandt, t001-bukrs.
  ENDIF.
ENDDO.
"关闭游标
EXEC SQL.
  CLOSE c1
ENDEXEC.

Native SQL的更多相关文章

  1. 13.hibernate的native sql查询(转自xiaoluo501395377)

    hibernate的native sql查询   在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hi ...

  2. Open SQL和Native SQL到底有什么本质的区别

    1.個人愚見:它們只是在实现的方式上,执行效率上不同,有的书上还说native sql存在一定风险 *& 20170521 171300 1.Open sql 是由创建数据库数据的ABAP命令 ...

  3. Native SQL的使用

    OPEN SQL也不是万能的,存在一定的局限性.例如后台数据库为Oracle,对数据表中某个字段大小写是不固定的,若以这个字段为查旬条件,一般Oracle处理方法是使用Upper /Lower函数据将 ...

  4. 使用Hibernate+MySql+native SQL的BUG,以及解决办法

      本来是mssql+hibernate+native SQL 应用的很和谐 但是到了把mssql换成mysql,就出了错(同样的数据结构和数据). 查询方法是: String sql = " ...

  5. 一个关于native sql的程序

    *&---------------------------------------------------------------------* *& Report ZHR_BPM11 ...

  6. Is it possible to run native sql with entity framework?

    For .NET Framework version 4 and above: use ObjectContext.ExecuteStoreCommand() if your query return ...

  7. hibernate的native sql查询

    在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hibernate推荐的HQL查询语句呢?这是因为HQ ...

  8. EntityFramework 学习 一 Execute Native SQL Query

    SQL query for entity types: using (var ctx = new SchoolDBEntities()) { var studentList = ctx.Student ...

  9. 分享公司DAO层动态SQL的一些封装

    主题 公司在DAO层使用的框架是Spring Data JPA,这个框架很好用,基本不需要自己写SQL或者HQL就能完成大部分事情,但是偶尔有一些复杂的查询还是需要自己手写原生的Native SQL或 ...

随机推荐

  1. 【python cookbook】【字符串与文本】14.字符串连接及合并

    问题:将许多小字符串合并成一个大的字符串 解决方案: 1.针对少数量的字符串:+ 2.针对大量的字符串对象的连接,更高效的方法:join() 3.更加复杂的字符串:format() >>& ...

  2. 【python cookbook】【数据结构与算法】1将序列分解为单独的变量

    如果对象是可迭代的(任何序列),则可以进行分解操作,包括元组.列表.字符串.文件.迭代器以及生成器,可通过简单的一个赋值操作分解为单独的变量. 唯一要求:变量的总数和序列相吻合,否则将出错: Pyth ...

  3. 调用css时,用link 和 @import url 有什么区别

    加载css link与@import的区别: 其实 link 与 @import 在显示效果上还是有很大区别的,基本上来看 link 的加在会在页面显示之前全部加在完全,而 @import 会是读取完 ...

  4. CSS修改方法

    1.在IE中,大部分情况下默认margin = 0px padding = 0px,但在Chrome中需要写明 在css.css文件开头加上(要加在最上面) html,body,ul,ol,li,ta ...

  5. MyBatis关联查询分页

    背景:单表好说,假如是MySQL的话,直接limit就行了. 对于多对多或者一对多的情况,假如分页的对象不是所有结果集,而是对一边分页,那么可以采用子查询分页,再与另外一张表关联查询,比如: sele ...

  6. oracle日期函数2!

    1.日期时间间隔操作  当前时间减去7分钟的时间 select sysdate,sysdate - interval '7' MINUTE from dual 当前时间减去7小时的时间 ...

  7. mysql使用索引扫描来做排序

    mysql有两种方式可以生成有序的结果,通过排序操作或者按照索引顺序扫描,如果explain的type列的值为index,则说明mysql使用了索引扫描来做排序(不要和extra列的Using ind ...

  8. Poj(1459),最大流,EK算法

    题目链接:http://poj.org/problem?id=1459 Power Network Time Limit: 2000MS   Memory Limit: 32768K Total Su ...

  9. springmvc配置文件-1

    项目1: web.xml <?xml version="1.0" encoding="UTF-8" standalone="no"?& ...

  10. Mybatis 和 Spring配置

    一.使用的jar包就不详细讲解了,下载了Mybatis 和 Spring 的jar包基本上都添加上去了. 一图概括:(这是我使用的ar包,有些不是Mybatis 和 Spring 的 ) 二. web ...