ILE RPGにSQLを埋め込む
前の训练の时、佳姉はRPGの中でSQL言语を埋め込むことを提案して、その时RPGプログラムの中で1つのクエリーの文を书いてみて、コンパイルはいつも通じません;
知識が限られているので、その時も置いてありました.
大学で「データベースシステムの概念」という授業を勉強していたとき、SQLに埋め込まれた点を理解しましたが、いくつかの理論の規範と文法に限られています.
今週はずっとRPGにSQLが埋め込まれているものを見ていて、少し基礎ができたので、昨日の午後に書いてみましたが、DB 2やRPGに関する知識をいくつか使ってみました.
勉强しながら、この过程は、确かに长くて、时には小さな欠点があって、资料を探すのに多くの时間がかかりますが、问题が解决してから个人的な感じを持って、かなりいいです.
以下は私の最初のILE RPGにSQLを埋め込んだ例です.
機能説明:三つの物理ファイル(STUDENT、COURSE、ACHIVMENT)を読み込み、相応のデータを取り出し、別の物理ファイルに保存させる.
STUDENT(sno,sname,sex,dob,addr),COURSE(cno,cname),ACHIVMENT(sno,cno,achv);
ACHIVMENTはsno,cnoを介してそれぞれSTUDENT,COURSEに接続されている.
クエリーのデータ:sname,cname,achv
i 5/OSの物理ファイルはDB 2の中のテーブルに対応しており、SQLクエリではテーブルの概念で物理ファイルを処理することもできます.
機能実装:カーソルを使用して、データをクエリーし、その後、ループを使用してカーソルからデータを読み出し、物理ファイルに書き込み、1つずつ書き込みます.
コードは次のとおりです.
注意:
1.SQLに埋め込まれ、プライマリファイル(P)は1つしかありません.
2.カーソルが開いたら、閉じてください.
3.カーソル内のデータをループして読み取る方法の1つ:DOUNEオペランド.
4.埋め込みSQLコードは必ず/EXEC SQLと/END-EXECの間に書く.
付録:三つの物理ファイルのデータと、コンパイラ(CRTSQLRPGI)が成功した後、CALLプログラムの結果:
-the end-
知識が限られているので、その時も置いてありました.
大学で「データベースシステムの概念」という授業を勉強していたとき、SQLに埋め込まれた点を理解しましたが、いくつかの理論の規範と文法に限られています.
今週はずっとRPGにSQLが埋め込まれているものを見ていて、少し基礎ができたので、昨日の午後に書いてみましたが、DB 2やRPGに関する知識をいくつか使ってみました.
勉强しながら、この过程は、确かに长くて、时には小さな欠点があって、资料を探すのに多くの时間がかかりますが、问题が解决してから个人的な感じを持って、かなりいいです.
以下は私の最初のILE RPGにSQLを埋め込んだ例です.
機能説明:三つの物理ファイル(STUDENT、COURSE、ACHIVMENT)を読み込み、相応のデータを取り出し、別の物理ファイルに保存させる.
STUDENT(sno,sname,sex,dob,addr),COURSE(cno,cname),ACHIVMENT(sno,cno,achv);
ACHIVMENTはsno,cnoを介してそれぞれSTUDENT,COURSEに接続されている.
クエリーのデータ:sname,cname,achv
i 5/OSの物理ファイルはDB 2の中のテーブルに対応しており、SQLクエリではテーブルの概念で物理ファイルを処理することもできます.
機能実装:カーソルを使用して、データをクエリーし、その後、ループを使用してカーソルからデータを読み出し、物理ファイルに書き込み、1つずつ書き込みます.
コードは次のとおりです.
FACHIVMENT IP E DISK
FCOURSE IS E DISK
FSTUDENT IS E DISK
FSTAT UF A E DISK
DCOL1 S 10A
DCOL2 S 15A
DCOL3 S 3S 0
D
C*
C EXSR @MAIN
C EXSR @EXIT
C*
C @MAIN BEGSR
C*
C/EXEC SQL
C+ DECLARE C1 CURSOR FOR
C+ SELECT S.SNAME,C.CNAME,A.ACHV
C+ FROM ACHIVMENT A,COURSE C,STUDENT S
C+ WHERE A.CNO = C.CNO
C+ AND A.SNO = S.SNO
C/END-EXEC
C*
C/EXEC SQL OPEN C1
C/END-EXEC
C
C/EXEC SQL WHENEVER NOT FOUND GO TO DONE1
C/END-EXEC
C*
C*SQLCOD = 0
C SQLCOD DOUNE 0
C
C/EXEC SQL
C+ FETCH C1 INTO :COL1,:COL2,:COL3
C/END-EXEC
C* STAT
C EVAL SNAME = COL1
C EVAL CNAME = COL2
C EVAL ACHV = COL3
C WRITE RSTAT
C END
C*
C DONE1 TAG
C/EXEC SQL CLOSE C1
C/END-EXEC
C ENDSR
C*
C @EXIT BEGSR
C EVAL *INLR = '1'
C RETURN
C ENDSR
注意:
1.SQLに埋め込まれ、プライマリファイル(P)は1つしかありません.
2.カーソルが開いたら、閉じてください.
3.カーソル内のデータをループして読み取る方法の1つ:DOUNEオペランド.
4.埋め込みSQLコードは必ず/EXEC SQLと/END-EXECの間に書く.
付録:三つの物理ファイルのデータと、コンパイラ(CRTSQLRPGI)が成功した後、CALLプログラムの結果:
SELECT * FROM STUDENT
Line ....+....1....+....2....+....3....+....4....+....5....+....6
000001 10,122,111 SCOTT 1 1985-12-01 GUANGZHOU
000002 10,123,210 THOMAS 1 1990-07-12 NEW YORK
000003 10,122,230 ALICE 0 1991-03-11 GUANGZHOU
000004 10,212,101 ANGELIA 0 1989-10-17 SHANGHAI
000005 10,122,402 CHARLENE 0 1989-11-12 BEIJING
000006 10,121,122 ADAMS 1 1992-01-01 HONGKONG
000007 10,122,309 TONY 1 1981-01-12 TAIWAN
000008 10,120,013 CATHY 0 1993-10-28 GUANGZHOU
-----------------------------------------------------------------------
SELECT * FROM COURSE
Line ....+....1....+....2....
000001 10,001 CHINESE
000002 10,002 ENGLISH
000003 10,003 MATH
000004 10,004 PHYSICS
000005 10,005 HISTORY
-----------------------------------
SELECT * FROM ACHIVMENT
Line ....+....1....+....2....+....
000001 10,122,111 10,001 76
000002 10,212,101 10,005 100
000003 10,120,013 10,002 98
000004 10,123,210 10,003 100
000005 10,122,402 10,001 88
----------------------------------------
SELECT * FROM STAT
Line ....+....1....+....2....+....3....+
000001 SCOTT CHINESE 76
000002 ANGELIA HISTORY 100
000003 CATHY ENGLISH 98
000004 THOMAS MATH 100
000005 CHARLENE CHINESE 88
-the end-