Mở SQL & SQL gốc trong SAP ABAP

Mục lục:

Anonim
Mục tiêu của hướng dẫn này không phải để dạy cho bạn các khái niệm về SQL hoặc cơ sở dữ liệu mà là để giới thiệu cho bạn về sự đa dạng của SQL trong ABAP

Trong ngôn ngữ lập trình ABAP / 4, có hai loại SQL đang được sử dụng.

  1. NATIVE SQL
  2. MỞ SQL.
Open SQL cho phép bạn truy cập các bảng cơ sở dữ liệu được khai báo trong từ điển ABAP bất kể nền tảng cơ sở dữ liệu mà hệ thống R / 3 đang sử dụng.

SQL gốc cho phép bạn sử dụng các câu lệnh SQL dành riêng cho cơ sở dữ liệu trong chương trình ABAP / 4. Điều này có nghĩa là bạn có thể sử dụng các bảng cơ sở dữ liệu không được quản lý bởi từ điển ABAP và do đó tích hợp dữ liệu không phải là một phần của hệ thống R / 3.

Open SQL bao gồm một tập hợp các câu lệnh ABAP thực hiện các hoạt động trên cơ sở dữ liệu trung tâm trong hệ thống R / 3. Kết quả của các hoạt động và bất kỳ thông báo lỗi nào là độc lập với hệ thống cơ sở dữ liệu đang sử dụng. Open SQL do đó cung cấp cú pháp và ngữ nghĩa thống nhất cho tất cả các hệ thống cơ sở dữ liệu được hỗ trợ bởi SAP. Các chương trình ABAP chỉ sử dụng câu lệnh Open SQL sẽ hoạt động trong bất kỳ hệ thống R / 3 nào, bất kể hệ thống cơ sở dữ liệu đang được sử dụng. Các câu lệnh SQL mở chỉ có thể hoạt động với các bảng cơ sở dữ liệu đã được tạo trong từ điển ABAP.

Các lệnh SQL mở cơ bản

  • LỰA CHỌN
  • CHÈN
  • CẬP NHẬT
  • SỬA ĐỔI
  • XÓA BỎ
  • MỞ CURSOR,? FETCH,? CLOSE CURSOR
Thí dụ
SỔ BẢNG BIỂU.BỘ QUẢN LÝ LOẠI DỮ LIỆU C,WA NHƯ SBOOK.MỞ CURSOR C ĐỂ CHỌN * TỪ SBOOK WHERE CARRID = 'LH'AND CONNID = '0400'VÀ FLDATE = '19950228'ĐẶT HÀNG BẰNG KHÓA CHÍNH.LÀM.TÌM KIẾM CURSOR C VÀO WA.NẾU SY-SUBRC <> 0.ĐÓNG CURSOR C.LỐI RA.ENDIF.VIẾT: / WA-BOOKID, WA-CUSTOMID, WA-CUSTTYPE,WA-SMOKER, WA-LUGGWEIGHT, WA-WUNIT,CHỜ HÓA ĐƠN.KẾT THÚC.

Xuất danh sách hành khách cho chuyến bay Lufthansa 0400 ngày 28-02.1995:

Mở mã trả lại SQL

Tất cả các câu lệnh Open SQL điền vào hai trường hệ thống sau bằng mã trả lại.

SY-SUBRC

Sau mỗi câu lệnh Open SQL, trường hệ thống SY-SUBRC chứa giá trị 0 nếu thao tác thành công, giá trị khác 0 nếu không.

SY-DBCNT

Sau một câu lệnh Open SQL, trường hệ thống SY-DBCNT chứa số dòng cơ sở dữ liệu được xử lý.

SQL gốc

Như đã đề cập, Native SQL cho phép bạn sử dụng các câu lệnh SQL dành riêng cho cơ sở dữ liệu trong một chương trình ABAP.

Để sử dụng câu lệnh SQL gốc, bạn phải đặt trước câu lệnh EXEC SQL và theo sau nó với câu lệnh ENDEXEC.

Cú pháp

EXEC SQL [PERFORMING 
].ENDEXEC.
Không có dấu chấm sau câu lệnh SQL gốc. Hơn nữa, việc sử dụng dấu phẩy ngược (") hoặc dấu hoa thị (*) ở đầu dòng trong câu lệnh SQL gốc không giới thiệu nhận xét như trong cú pháp ABAP thông thường. Bạn cần biết liệu tên bảng và trường có phải là chữ hoa hay không- nhạy cảm trong cơ sở dữ liệu bạn đã chọn.

Trong câu lệnh SQL gốc, dữ liệu được vận chuyển giữa bảng cơ sở dữ liệu và chương trình ABAP bằng cách sử dụng các biến máy chủ. Chúng được khai báo trong chương trình ABAP và đặt trước câu lệnh SQL gốc bằng dấu hai chấm (:). Bạn có thể sử dụng cấu trúc cơ bản làm biến máy chủ. Đặc biệt, các cấu trúc trong mệnh đề INTO được coi như thể tất cả các trường của chúng được liệt kê riêng lẻ.

Như trong Open SQL, sau câu lệnh ENDEXEC, SY-DBCNT chứa số dòng được xử lý. Trong hầu hết các trường hợp, SY-SUBRC chứa giá trị 0 sau câu lệnh ENDEXEC.

Mở SQL - Quy tắc Hiệu suất

Để cải thiện hiệu suất của SQL và đến lượt chương trình ABAP, người ta nên quan tâm đến các quy tắc sau:

Giữ Tập hợp Kết quả Nhỏ

  • Sử dụng mệnh đề where
  • Nếu chỉ có một bản ghi được yêu cầu từ cơ sở dữ liệu, hãy sử dụng SELECT SINGLE bất cứ khi nào có thể.
Giảm thiểu số lượng dữ liệu được truyền
  • Hạn chế số dòng
  • Nếu chỉ một số trường nhất định được yêu cầu từ một bảng, hãy sử dụng câu lệnh SELECT INTO…
  • Hạn chế không có cột
  • Sử dụng các hàm tổng hợp
Giảm thiểu số lần truyền dữ liệu
  • Tránh các vòng lặp chọn lồng nhau
  • Một tùy chọn thay thế là sử dụng câu lệnh SELECT… FOR ALL ENTRIES. Câu lệnh này thường có thể hiệu quả hơn rất nhiều so với việc thực hiện một số lượng lớn các câu lệnh SELECT hoặc SELECT SINGLE trong quá trình LOOP của một bảng nội bộ.
  • Sử dụng chế độ xem từ điển
  • Sử dụng Joins trong mệnh đề FROM
  • Sử dụng truy vấn con trong mệnh đề where
Giảm thiểu chi phí tìm kiếm
  • Sử dụng các trường chỉ mục trong mệnh đề where
  • Khi truy cập cơ sở dữ liệu, hãy luôn đảm bảo rằng chỉ mục chính xác đang được sử dụng.
Giảm tải cơ sở dữ liệu
  • Đệm
  • Cơ sở dữ liệu logic
  • Tránh truy cập cơ sở dữ liệu lặp lại
Sử dụng bảng nội bộ để ghi đệm
  • Để tránh thực hiện cùng một CHỌN nhiều lần (và do đó có các lựa chọn trùng lặp), một bảng nội bộ kiểu HASHED có thể được sử dụng để cải thiện hiệu suất.