嵌入式SQL语句与主语言之间的通信(续) ●小结 在嵌入式SQL中,SQL语句与主语言语句分 工非常明确 ●SQL语句:直接与数据库打交道 主语言语句 1.控制程序流程 2对SQL语句的执行结果做进一步 加工处理
嵌入式SQL语句与主语言之间的通信 语句与主语言之间的通信(续) z小结 – – 在嵌入式SQL中,SQL语句与主语言语句分 语句与主语言语句分 工非常明确 z SQL语句:直接与数据库打交道 语句:直接与数据库打交道 z 主语言语句 1. 控制程序流程 2. 对SQL语句的执行结果做进一步 语句的执行结果做进一步 加工处理
嵌入式SQL语句与主语言之间的通信(续) SQL语句用主变量从主语言中接收执行参 数,操纵数据库 SQL语句的执行状态由DBMS送至 SQLCA中 主语言程序从 SQLCA中取出状态信息,据此 决定下一步操作 如果SQL语句从数据库中成功地检索出数 据,则通过主变量传给主语言做进一步处理 SQL语言和主语言的不同数据处理方式通过 游标来协调
嵌入式SQL语句与主语言之间的通信 语句与主语言之间的通信(续) – – SQL语句用主变量从主语言中接收执行参 语句用主变量从主语言中接收执行参 数,操纵数据库 数,操纵数据库 – – SQL语句的执行状态由 语句的执行状态由DBMS送至SQLCA中 – – 主语言程序从SQLCA中取出状态信息,据此 中取出状态信息,据此 决定下一步操作 决定下一步操作 – – 如果SQL语句从数据库中成功地检索出数 语句从数据库中成功地检索出数 据,则通过主变量传给主语言做进一步处理 据,则通过主变量传给主语言做进一步处理 – – SQL语言和主语言的不同数据处理方式通过 语言和主语言的不同数据处理方式通过 游标来协调
嵌入式SQL语句与主语言之间的通信(续) 例:带有嵌入式SQL的一小段C程序 EXEC SQL INCLUDE SQLCA; /(1)定义SQL通信区* EXEC SQL BEGIN DECLARE SECTION /2(2)说明主变量 char title id(7) ChAR title( 81) INt royalty EXEC SQL END DECLARE SECTION
嵌入式SQL语句与主语言之间的通信 语句与主语言之间的通信(续) 例:带有嵌入式 例:带有嵌入式SQL的一小段C程序 ............ ............ EXEC SQL INCLUDE SQLCA; EXEC SQL INCLUDE SQLCA; /* (1) 定义SQL通信区 */ EXEC SQL BEGIN DECLARE SECTION; EXEC SQL BEGIN DECLARE SECTION; /* (2) 说明主变量 */ CHAR title_id(7); CHAR title_id(7); CHAR title(81); CHAR title(81); INT royalty; INT royalty; EXEC SQL END DECLARE SECTION; EXEC SQL END DECLARE SECTION;
嵌入式SQL语句与主语言之间的通信(续) main EXEC SQL DECLARE CI CURSOR FOR SELECT tit id, tit, roy FROM titles /(3)游标操作(定义游标) /从ites表中查询ttid, tit, roy EXEC SQL OPEN CI /(4)游标操作(打开游标)*
嵌入式SQL语句与主语言之间的通信 语句与主语言之间的通信(续) main() { EXEC SQL DECLARE C1 CURSOR FOR EXEC SQL DECLARE C1 CURSOR FOR SELECT tit_id, tit, SELECT tit_id, tit, roy FROM titles; FROM titles; /* (3) 游标操作(定义游标) 游标操作(定义游标)*/ /* 从titles表中查询 tit_id, tit, tit_id, tit, roy */ EXEC SQL OPEN C1; EXEC SQL OPEN C1; /* (4) 游标操作(打开游标) 游标操作(打开游标)*/
嵌入式SQL语句与主语言之间的通信(续) for(;;) EXEC SQL FETCH CI INTO: title id, title, royalty /(5)游标操作(将当前数据放入主变量并推选游标指针) if (sqlca sqlcode SUCCEsS /(6)利用 SQLCA中的状态信息决定何时退出循环 break: printf("Title ID:%S, Royalty: %d", title id, royalty ); printf("Title: %s",: title): /打印查询结果"/ EXEC SQL CLOSE CI /(7)游标操作(关闭游标)
嵌入式SQL语句与主语言之间的通信 语句与主语言之间的通信(续) for(;;) for(;;) { EXEC SQL FETCH C1 INTO :title_id, :title, :royalty; EXEC SQL FETCH C1 INTO :title_id, :title, :royalty; /* (5) 游标操作(将当前数据放入主变量并推进游标指针)*/ if (sqlca.sqlcode sqlca.sqlcode <> SUCCESS) <> SUCCESS) /* (6) 利用SQLCA中的状态信息决定何时退出循环 */ break; break; printf("Title printf("Title ID: %s, Royalty: %d", ID: %s, Royalty: %d", :title_id, :royalty); :title_id, :royalty); printf("Title printf("Title: %s", :title); : %s", :title); /* 打印查询结果 */ } EXEC SQL CLOSE C1; EXEC SQL CLOSE C1; /* (7) 游标操作(关闭游标)*/ }