按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
个工作没有过程语言 如 PL/SQL 或 SHELL 脚本 的支持是不行的
我们可以在一个 SHELL 脚本中使用内嵌的 SQL 过程语言函数中需要插入适当的语
法成份 比如逗号 脚本必须足够地聪明以知道哪里是最后一个逗号 因为在最后一个逗
号的后边就没有逗号了 脚本也必须知道在哪些地方需要放置括号 在用数据字典重新生
374
…………………………………………………………Page 375……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
成对象的时候 SEEK 工具是很有用的 不管你是使用 C Perl shell scripts COBOL 还是
PL/SQL
总结
直接地从数据库中生成语句可以避免许多单调乏味的输入 SQL 语句的工作 不管你做
什么工作 使用 SQL 生成技术都可以在你的某个工作阶段减少你的工作量
如果你已经学习了今天的基本内容— — 尽管这些例子是使用 ORACLE 来完成的 你可
以在其它的关系数据库系统中应用这一概念 请检查你的数据库解释器和数据字典的结构
以找出它们与本书中例子的不同之外 如果你开明的话 你会发现许多生成 SQL 脚本的方
法 从简单的语句到高度复杂的系统管理中都有
问与答
问 我如何才能决定是手工写 SQL 还是来生成它
答 问你自己下边的问题
你解决问题时使用该语句的频繁程度如何
在写母语句是否比写子语句耗用更多的时间
问 生成 SQL 语句时我有哪些表可供选择
答 你可以选择任何一个你可以访问的表 这不管这些表是否为你所有或它是否在数
据字典中 你可以选择所有在你数据库中的有效对象 比如视图或快捷方式
问 我在生成 SQL 语句是是否有限制
答 对于大多数的语句你既可以手工写出也可以生成 请检查你的解释器看一下看它
是否有输出到文件选项以及输出格式是否是你所需要的 切记 在生成输出文件后你应该
手工修改一下文件的内容
校练场
1 你生成 SQL 的来源有哪两个
2 下边的 SQL 语句是否可以工作 它会输出什么
SQL》 SET ECHO OFF
375
…………………………………………………………Page 376……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》 SET FEEDBACK OFF
SQL》 SPOOL CNT。SQL
SQL》 SELECT 'COUNT(*) FROM ' || TABLE_NAME || ';'
2 FROM CAT
3 /
3 下边的 SQL 语句是否可以工作 它会输出什么
SQL》 SET ECHO OFF
SQL》 SET FEEDBACK OFF
SQL》 SPOOL GRANT。SQL
SQL》 SELECT 'GRANT CONNECT DBA TO ' || USERNAME || ';'
2 FROM SYS。DBA_USERS
3 WHERE USERNAME NOT IN ('SYS';'SYSTEM';'SCOTT')
4 /
4 下边的 SQL 语句是否可以工作 它会输出什么
SQL》 SET ECHO OFF
SQL》 SET FEEDBACK OFF
SQL》 SELECT 'GRANT CONNECT; DBA TO ' || USERNAME || ';'
2 FROM SYS。DBA_USERS
3 WHERE USERNAME NOT IN ('SYS';'SYSTEM';'SCOTT)
4 /
5 在运行生成的 SQL 时最为将 FEEDBACK 设置为 ON 对不对
6 从 SQL 中生成 SQL 语句时 必须将输入的结果重新定向到一个文件中 对不对
7 在生成 SQL 语句用以对表的内容进行删减时 你必须先确认自己已经对所要删减
的表作了很好的备份 对不对
8 什么是 ED 命令
9 SPOLL OFF 命令是做什么的
练习
1 使用 SYS。DBA_USERS 视图 在 PERSONAL ORACLE 7 中 写一个语句来生成一
376
…………………………………………………………Page 377……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
系列 GRANT 语句为下边的五个用户 John Kevin Ryan Ron 和 Chris 授权 使
他们可以访问 History_tbl 表 在写语句时对应的用户名用 USERNAME 来代替
2 用本章给出的例子作指引 写一些 SQL 来创建一些可以生成你能使用的 SQL 语句
377
…………………………………………………………Page 378……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
第 18 天 PL/SQL 简介
目标
PL/SQL 是一项 ORACLE 的技术 它可以让 SQL 像过程型语言一样工作 到今天的结
束 你将
l 对 PL/SQL 有一个基本的了解
l 明白 PL/SQL 的特点以及它与标准的 SQL 的区别
l 知道 PL/SQL 编写程序的基本原理
l 可以写简单的 PL/SQL 程序
l 知道如何处理在 PL/SQL 编程中的错误
l 知道如何在真实的世界中使用 PL/SQL
入门
从对标准的 SQL 进行介绍是一种入门 PL/SQL 或 SQL 的方法 SQL 是一种可以让
关系数据库用户以一种直接的方式来访问数据库的方法 你可以使用 SQL 来对数据库进行
查询和修改其中的表 在你写 SQL 语句的时候 你可以告诉数据库你要做什么 而不是如
何去做 优化器会自己决定采用一种最有效的方法来执行你的语句 如果你向数据库中发
送了一系列标准的 SQL 语句 服务将会按语句的先后次序来执行它们
PL/SQL 是 ORACLE 的过程型语言 它由标准的 SQL 语句和一系列可以让你在不同的
情况下对 SQL 语句的执行进行控制的命令组成 PL/SQL 也可以在运行时捕获错误 储如
LOOP 和 IF THEN ELSE 语句让 PL/SQL 具有了第三代编程语言的能力 PL/SQL
也可以以交互方式写出 用户友好型界面会把数值赋给它的变量 你可以使用许多种预定
义的包 它们可以将信息显示给用户
今天的内容主要包括 PL/SQL 的以下特性
l 程序员可以定义在语句中使用的变量
l 程序员可以使用错误控制例程来访止程序的意外中断和退出
l 程序员可以写交互式程序来接受来自用户的输入
378
…………………………………………………………Page 379……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
l 程序员可以将功能划分为不同的逻辑代码块 编程的模块化为应用程序开发环境
提供了更大的灵活性
l SQL 语句可以并行执行以获得最优的性能
在 PL/SQL 中的数据类型
大多数数据的类型是相似的 但是每一种解释器都有自己独特的存储方式和内部过程
需要 在写 PL/SQL 的语句块时 你将会定义变量 它们必须是真实的数据类型 下边的
小标题对 PL/SQL 中可用的变量进行了详细的介绍
在 PL/SQL 中也提供了数据类型的子类型 例如 数据类型 NUMBER 的子类型叫
INTEGER 你可以在 PL/SQL 程序中使用子类型来保证它与其它程序如 COBOL 中数据类
型的一致 尤其是在其它的程序中内嵌的 PL/SQL 代码时更要如此 子类型只是 ORACLE
中数据类型的别名 所以它必须遵循与之相关联的数据类型的规则
注 在大多数的 SQL 解释器中语法的大小写是不敏感的 PL/SQL 同样允许在它的语句中
使用大小写 它也是大小写不敏感的
字符串类型
在 PL/SQL 中的字符串类型所你所想的一样 是一种常见的数据类型定义 它允许在
其中有字母和数字 像名字 代码 描述 序列号等都可以包括在字符串中
CHAR 中存储着固定长度的字符串 CHAR 在最大长度为 32767 个字节 尽管很难想
象在哪一个表中的字符串会有这么长
语法
CHAR ( max_length )
子类型 CHARACTER
VARCHAR2 则存储着长度可变的字符串 你会经常用 VARCHAR2 来存储长度可变的
字符串 比如某人的名字 VARCHAR2 所允许的最大长度为 32767 个字节
语法
VARCHAR2 ( max_length )
子类型 VARCHAR; STRING
379
…………………………………………………………Page 380……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
LONG 也可以存储变长的字符串 它的最大长度为 32760 个字节 LONG 是典型的用
以存储长文本如备注 尽管 VARCHAR2 也能做同样的工作
数值数据类型
NUMBER 用以存储在 ORACLE 数据库中的任何类型的数值
语法
NUMBER ( max_length )