首页 > 学院 > 开发设计 > 正文

Native SQL

2019-11-08 20:33:57
字体:
来源:转载
供稿:网友

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,但是游标除外,在After FETCH之后,如果没有读取到数据,SY-SUBRC将会为4。

 

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 =:c1ENDEXEC.FORM loop_output.  WRITE: / wa-connid,wa-cityfrom,wa-cityto.ENDFORM

 

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

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

也可以。

 

image210

调用存储过程

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>

 

DATA:arg1 TYPE string VALUE '800'.TABLES: t001."打开游标EXEC SQL.  OPEN c1 FOR SELECTMANDT, BUKRS FROM T001              WHERE MANDT = :arg1 AND BUKRS >= 'ZA01'ENDEXEC.DO.  "读取游标  EXEC SQL.    FETCH NEXT c1 INTO :t001-mandt, :t001-bukrs  ENDEXEC.  IF sy-subrc <>0.    EXIT.  ELSE.    WRITE: / t001-mandt, t001-bukrs.  ENDIF.ENDDO."关闭游标EXEC SQL.  CLOSE c1ENDEXEC.

原文出自:www.cnblogs.com/jiangzhengjun
上一篇:Open SQL详解

下一篇:Redis安装与配置

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表