- 1、本文档共132页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据库系统原理数据库编程课件解读
存储过程的用户接口(续) 重命名存储过程 ALTER Procedure 过程名1 RENAME TO 过程名2; CURRENT形式的UPDATE语句和DELETE语句(续) 当游标定义中的SELECT语句带有UNION或ORDER BY子句时,或者该SELECT语句相当于定义了一个不可更新的视图时,不能使用CURRENT形式的UPDATE语句和DELETE语句。 嵌 入 式 SQL 8.1.1 嵌入式SQL的处理过程 8.1.2 嵌入式SQL语句与主语言之间的通信 8.1.3 不使用游标的SQL语句 8.1.4 使用游标的SQL语句 8.1.5 动态SQL 8.1.6 小结 静态嵌入式SQL的特点 静态ESQL——所使用的主变量,查询的对象与条件都是固定的。 用户可以在程序运行过程中根据实际需要输入WHERE子句或HAVING子句中某些变量的值。 语句中主变量的个数与数据类型在预编译时都是确定的,只是主变量的值是程序运行过程中动态输入的。 8.1.5 动态SQL 静态嵌入式SQL 静态嵌入式SQL语句能够满足一般要求 无法满足要到执行时才能够确定要提交的SQL语句,查询条件。 动态嵌入式SQL 允许在程序运行过程中临时“组装”SQL语句 支持动态组装SQL语句和动态参数两种形式 动态嵌入式SQL 常用动态SQL语句 EXECUTE IMMEDIATE PREPARE EXECUTE 使用动态SQL技术更多的是涉及程序设计方面的知识,而不是SQL语言本身 动态嵌入式SQL 一、使用SQL语句主变量 二、动态参数 一、使用SQL语句主变量 SQL语句主变量: 包含的是SQL语句的内容,而不是原来保存数据的输入或输出变量 SQL语句主变量在程序执行期间可以设定不同的SQL语句,然后立即执行 使用SQL语句主变量(续) [例] 创建基本表TEST EXEC SQL BEGIN DECLARE SECTION; const char *stmt = CREATE TABLE test(a int);; /* SQL语句主变量 */ EXEC SQL END DECLARE SECTION; ... ... EXEC SQL EXECUTE IMMEDIATE :stmt; /* 执行语句 */ 二、动态参数 动态参数 SQL语句中的可变元素 使用参数符号(?)表示该位置的数据在运行时设定 和主变量的区别 动态参数的输入不是编译时完成绑定 而是通过 (prepare)语句准备主变量和执行(execute)时绑定数据或主变量来完成 动态参数(续) 使用动态参数的步骤: 1.声明SQL语句主变量(含动态参数?)。 2.准备SQL语句(PREPARE)。 EXEC SQL PREPARE 语句名 FROM SQL语句主变量; 3.执行准备好的语句(EXECUTE) EXEC SQL EXECUTE 语句名 [INTO 主变量表] [USING 主变量或常量]; 动态参数(续) [例]向TEST中插入元组。 EXEC SQL BEGIN DECLARE SECTION; const char *stmt = INSERT INTO test VALUES(?);; /*声明SQL主变量 */ EXEC SQL END DECLARE SECTION; ... ... EXEC SQL PREPARE mystmt FROM :stmt; /* 准备语句 */ ... ... EXEC SQL EXECUTE mystmt USING 100; /* 执行语句 */ EXEC SQL EXECUTE mystmt USING 200; /* 执行语句 */ 动态参数(续) [例] EXEC SQL BEGIN DECLARE SECTION; char *query = “UPDATE sc SET grade=grade*1.1 WHERE c#=?;; /*声明动态SQL主变量 */ char *cno=“C4”; EXEC SQL END DECLARE SECTION; ... ... EXEC SQL PREPARE mysql FROM :query; /* 准备语句*/ EXEC SQL EXECUTE mysql USING :cno; /* 执行语句 */ 8.1 嵌入式SQL 8.1.1 嵌入式SQL的处理过
文档评论(0)