嵌入式SQL
嵌入式SQL必须解决的问题:
如何将嵌有SQL的宿主语言程序编译成可执行码
宿主语言和DBMS之间如何传递数据和信息
数据库的查询结果一般是元组的集合,这些元组须逐个赋给宿主语言程序中的变量,供其处理,其间存在转换问题
两者的数据类型有时不完全对应或等价,需解决必要的数据类型转换问题
嵌入式SQL的一般形式
对宿主型数据库语言SQL,DBMS处理方法:
预编译
修改和扩充主语言使之能处理SQL语句
为区分SQL语言和主语言:
所有SQL语句都必须加前缀 EXEC SQL;
SQL的结束标志随主语言不同而不同。PL/1和C以分号(;)结束,COBOL中以END-EXEC结束
例: EXEC SQL DROP TABLE student;
嵌入式SQL与主语言之间的通信
数据库工作单元与源程序工作单元之间的通信主要包括:
向主语言传递SQL语句的执行状态信息,使主语言能够据此控制程序流程,主要用SQL通信区(SQLCA)实现
主语言向SQL语句提供参数,主要用主变量实现
将SQL语句查询数据库的结果交主语言进一步处理,主要用主变量和游标实现
SQL通信区
SQLCA是系统定义的一个全局变量,在应用程序中定义,其格式为:
EXEC SQL INCLUDE SQLCA;
SQLCA中有一个变量SQLCODE:存放每次执行SQL语句后返回的代码,主要用于向应用程序报告SQL的执行情况。
主变量(1)
主变量:SQL语句中使用的主语言程序变量,可分为:输入主变量和输出主变量。
输入主变量由应用程序赋值,SQL语句引用
输出主变量由SQL语句赋值,返回应用程序
主变量不能直接接受空值NULL,可在主变量后跟一指示变量(整型变量),用来指示主变量是否为NULL
主变量(2)
所有主变量除系统定义者外,均要说明,说明的开头行和结束行分别为:
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
说明后,为和数据库对象名区别,SQL语句中的主变量名和指示变量前要加冒号(:)作标志。SQL语句之外可直接引用。
嵌入式SQL必须解决的问题:
如何将嵌有SQL的宿主语言程序编译成可执行码
宿主语言和DBMS之间如何传递数据和信息
数据库的查询结果一般是元组的集合,这些元组须逐个赋给宿主语言程序中的变量,供其处理,其间存在转换问题
两者的数据类型有时不完全对应或等价,需解决必要的数据类型转换问题
嵌入式SQL的一般形式
对宿主型数据库语言SQL,DBMS处理方法:
预编译
修改和扩充主语言使之能处理SQL语句
为区分SQL语言和主语言:
所有SQL语句都必须加前缀 EXEC SQL;
SQL的结束标志随主语言不同而不同。PL/1和C以分号(;)结束,COBOL中以END-EXEC结束
例: EXEC SQL DROP TABLE student;
嵌入式SQL与主语言之间的通信
数据库工作单元与源程序工作单元之间的通信主要包括:
向主语言传递SQL语句的执行状态信息,使主语言能够据此控制程序流程,主要用SQL通信区(SQLCA)实现
主语言向SQL语句提供参数,主要用主变量实现
将SQL语句查询数据库的结果交主语言进一步处理,主要用主变量和游标实现
SQL通信区
SQLCA是系统定义的一个全局变量,在应用程序中定义,其格式为:
EXEC SQL INCLUDE SQLCA;
SQLCA中有一个变量SQLCODE:存放每次执行SQL语句后返回的代码,主要用于向应用程序报告SQL的执行情况。
主变量(1)
主变量:SQL语句中使用的主语言程序变量,可分为:输入主变量和输出主变量。
输入主变量由应用程序赋值,SQL语句引用
输出主变量由SQL语句赋值,返回应用程序
主变量不能直接接受空值NULL,可在主变量后跟一指示变量(整型变量),用来指示主变量是否为NULL
主变量(2)
所有主变量除系统定义者外,均要说明,说明的开头行和结束行分别为:
EXEC SQL BEGIN DECLARE SECTION;
EXEC SQL END DECLARE SECTION;
说明后,为和数据库对象名区别,SQL语句中的主变量名和指示变量前要加冒号(:)作标志。SQL语句之外可直接引用。