Native SQL允許你針對(duì)數(shù)據(jù)庫來使用原生的SQL,這些SQL可能是標(biāo)準(zhǔn)的SQL,也可以是某數(shù)據(jù)庫特定的SQL。如果使用database-specific SQL語句,則數(shù)據(jù)庫不能更換,否則請(qǐng)使用Open SQL。
本地SQL會(huì)繞過R/3 database interface,操作時(shí)不會(huì)記錄日志,不會(huì)同步應(yīng)用服務(wù)器上的database buffer。另外,使用ABAP Dictionary定義的類型為L(zhǎng)CHR or LRAW的長(zhǎng)列時(shí),這些列需要使用Open SQL來讀取,因?yàn)樽x取這些字段時(shí),還需要使用另外存儲(chǔ)此類型長(zhǎng)列的長(zhǎng)度信息,才能準(zhǔn)確讀出。最后,本地SQL是不會(huì)自動(dòng)能客戶端字段MANDT字段進(jìn)行處理,該字段會(huì)像普通字段那樣對(duì)待。
為了事務(wù)的一致性,在本地SQL中不要使用事務(wù)控制的語句(如COMMIT, ROLLBACK WORK),以及事務(wù)設(shè)置語句(如級(jí)別設(shè)置)
EXEC SQL [PERFORMING <form>].<Native SQL statement>[;]
ENDEXEC.
Native SQL statement后面的分號(hào)是可選的,但不能是“.”
如果Native SQL 是一個(gè)從表里SELECT statement時(shí),你可以通過PERFORMING選項(xiàng)的<form>里來一行行讀取,如果不需要處理返回結(jié)果,或者是UPDATE、DELETE語句時(shí),可以省略選項(xiàng)。
在ENDEXEC執(zhí)行完后,SY-DBCNT存儲(chǔ)了處理的數(shù)據(jù)行數(shù)。在幾乎所有情況下,在執(zhí)行ENDEXEC 后,SY-SUBRC都會(huì)為0,但是游標(biāo)除外,在After FETCH之后,如果沒有讀取到數(shù)據(jù),SY-SUBRC將會(huì)為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語句不能以句點(diǎn)號(hào)結(jié)尾;
"不能在EXEC SQL…ENDEXEC間有注釋,即不能有星號(hào)與雙引號(hào)的出現(xiàn);
"另外還要注意數(shù)據(jù)庫系統(tǒng)大小寫是否敏感;
"參數(shù)占位符使用冒號(hào),而不是問號(hào);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
也可以。

EXECUTE PROCEDURE<name> ( <parameter list> )
參數(shù)以逗號(hào)分隔,并需要IN、OUT 來指定是輸入還是輸出參數(shù),或者是使用INOUT來表示即是輸入也是輸出參數(shù)
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."打開游標(biāo)EXEC SQL. OPEN c1 FOR SELECTMANDT, BUKRS FROM T001 WHERE MANDT = :arg1 AND BUKRS >= 'ZA01'ENDEXEC.DO. "讀取游標(biāo) EXEC SQL. FETCH NEXT c1 INTO :t001-mandt, :t001-bukrs ENDEXEC. IF sy-subrc <>0. EXIT. ELSE. WRITE: / t001-mandt, t001-bukrs. ENDIF.ENDDO."關(guān)閉游標(biāo)EXEC SQL. CLOSE c1ENDEXEC.
原文出自:www.cnblogs.com/jiangzhengjun新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注