3.05-7 dynamic SQL(动态SQL) Introduction 应用程序嵌入的$QL完全固定不方便:因分析方面的 意图,指定一些操作条件,有时是必要的。 所以嵌入式SQL中,提供了动态结构$QL语句的功能。 目前SQL标准和大部DBMS均增加了动态SQL功能。 动态SQL分三种类型: execute immediate SQL直接执行SQL SQL with Dynamic parameter带动态参数的SQL Query Dynamic SQL查询类动态SQL
3.05-7 dynamic SQL (动态SQL) 一 Introduction 应用程序嵌入的SQL完全固定不方便:因分析方面的 意图,指定一些操作条件,有时是必要的。 所以嵌入式SQL中,提供了动态结构SQL语句的功能。 目前SQL标准和大部DBMS均增加了动态SQL功能。 动态SQL分三种类型: execute immediate SQL 直接执行SQL SQL with Dynamic parameter 带动态参数的SQL Query Dynamic SQL 查询类动态SQL
二Dynamic SQL executed immediately (直接执行的动态SQL) ●只用于非查询语句:DDL,DM心 应用程序定义一个字符串类型的宿主变量,存 放要执行的$QL语句。 SQL语句固定部分由程序赋值给宿主变量。 可变部分由程序提示,用户输入。 用EXEC SQL EXECUTE IMMEDI ATE语句执行宿主 变量中的SQL语句
二 Dynamic SQL executed immediately (直接执行的动态SQL) ⚫ 只用于非查询语句:DDL,DML ⚫ 应用程序定义一个字符串类型的宿主变量,存 放要执行的SQL语句。 ⚫ SQL语句固定部分由程序赋值给宿主变量。 可变部分由程序提示,用户输入。 ⚫ 用EXEC SQL EXECUTE IMMEDIATE语句执行宿主 变量中的SQL语句
例:从关系STUDENT中删除指定条件的学生记 录。条件存在应用程序变量cond中.由于 cond在语句末尾,其后应加‘;’号 EXEC SQL BEGIN DECLARE SECTION; char Sqlstring[200];/*定义宿主变量*/ EXEC SQL END DECLARE SECTION; /开始行和结束行均为独立语句*/
例:从关系STUDENT中删除指定条件的学生记 录。条件存在应用程序变量cond中. 由于 cond在语句末尾,其后应加‘ ; ’号 · · · EXEC SQL BEGIN DECLARE SECTION; char Sqlstring[200]; /*定义宿主变量*/ EXEC SQL END DECLARE SECTION; /*开始行和结束行均为独立语句*/
char cond [150] /*填入SQL固定部分*/ strcopy (sqlstring,"DELETE FROM STUDENT WHERE ") printf ("Enter Search condition:" scanf ("%s,cond) strcat (sqlstr ing,cond) EXEC SQL EXECUTE IMMEDIATE sqlstr ing;
char cond[150]; /*填入SQL固定部分*/ strcopy(sqlstring,"DELETE FROM STUDENT WHERE "); printf("Enter Search condition:"); scanf("%s,cond); strcat(sqlstring,cond); EXEC SQL EXECUTE IMMEDIATE :sqlstring; · · ·
三带动态参数的动态SQL: ●也只用于非查询语句。 ● 占位器(place holder) 它是一种未定义变量,执行前应用程序提示用 户输入参数,取代占位变量。 ● 仍用删除符合条件的学生的例子。 EXEC SQL BEGIN DECLARE SECTION; Char Sqlstring [200]; int birth-year; EXEC SQL END DECLARE SECTION;
三 带动态参数的动态SQL: ⚫ 也只用于非查询语句。 ⚫ 占位器(place holder) 它是一种未定义变量,执行前应用程序提示用 户输入参数,取代占位变量。 ⚫ 仍用删除符合条件的学生的例子。 EXEC SQL BEGIN DECLARE SECTION; Char Sqlstring[200]; int birth-year; EXEC SQL END DECLARE SECTION;