Embedded SQL trong COBOL: Hiểu về Pro*COBOL và khối EXEC SQL
Embedded SQL (Pro*COBOL) là gì?
Trong hệ thống COBOL enterprise, business logic thường phải đọc/ghi dữ liệu trong relational database như Oracle. Thay vì tự viết các database call mức thấp, ta dùng Embedded SQL: các câu lệnh SQL được viết bên trong source COBOL, được đánh dấu bằng EXEC SQL ... END-EXEC.
Pro*COBOL là precompiler của Oracle hiểu các Embedded SQL này. Nó:
- Quét chương trình COBOL.
- Tìm tất cả block
EXEC SQL ... END-EXEC. - Dịch mỗi block thành lời gọi COBOL native tới Oracle runtime library.
Sau đó, bạn compile file COBOL đã được sinh ra bằng COBOL compiler như bình thường.
Về khái niệm:
- Bạn viết: COBOL + SQL trong các block
EXEC SQL. - Pro*COBOL dịch Embedded SQL → các lời gọi procedure COBOL.
- COBOL compiler chỉ thấy code COBOL chuẩn.
Lợi ích:
- COBOL xử lý control flow, batch, file I/O.
- SQL xử lý truy vấn dữ liệu quan hệ, transaction, join, aggregate.
Ví dụ chương trình dùng ba Embedded SQL quan trọng:
EXEC SQL COMMIT WORK RELEASE END-EXEC.EXEC SQL ROLLBACK WORK RELEASE END-EXEC.EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.
Ba câu này điều khiển transaction boundary và error handling.
Pro*COBOL precompiler hoạt động như thế nào?
Từ source trộn (COBOL + SQL) đến COBOL thuần
Flow build điển hình:
- Viết source
PROGRAM.PCO:- Chứa câu lệnh COBOL.
- Chứa Embedded SQL:
EXEC SQL
SELECT COL1 INTO :WS-COL1
FROM MY_TABLE
WHERE KEY = :WS-KEY
END-EXEC.
-
Chạy Pro*COBOL precompiler:
- Input:
PROGRAM.PCO. - Output:
PROGRAM.CBL. - Mỗi block
EXEC SQLđược thay bằng code COBOL + lời gọi Oracle runtime.
- Input:
-
Compile bằng COBOL compiler (nhìn thấy COBOL thuần).
-
Link và run: executable dùng Oracle library để gửi SQL xuống DB.
Developer chủ yếu suy nghĩ ở mức COBOL + SQL, không phải ở mức call API thấp.
Yêu cầu đăng nhập
Vui lòng đăng nhập để truy cập nội dung này
Additional Resources
Course Guide
Comprehensive PDF guide with examples
GitHub Repository
Example code for all lessons
Discussion
Have a question about this lesson? Post it here and get answers from instructors and peers.
