SQL 21日自学通(V3.0)(PDF格式)-第86部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
P03 COFFEE MUG 6。95
P04 FAR SIDE CALENDAR 10。5
P05 NATURE CALENDAR 12。99
P06 SQL MAND REFERENCE 29。99
P07 BLACK LEATHER BRIEFCASE 99。99
分析
在这个交互式查询中 PRODUCT 替换了原来的&TBL
DEFINE
在 SQL 的脚本中你可以使用 DEFINE 来对一个变量赋值 如果在你的 SQL 脚本中定
义了变量 那么在运行时用户不会像你使用&时那样被提示输入数值 在下一个例子中使
用与上一个例子相同的 SELECT 语句 但是这次 TBL 的值是在脚本中定义的
输入
SQL》 define TBL=products
SQL》 select * from &TBL;
输出
old 2: from &TBL
new 2: from products
PRO PRODUCT_NAME UNIT_COST
P01 MICKEY MOUSE LAMP 29。95
P02 NO 2 PENCILS 20 PACK 1。99
P03 COFFEE MUG 6。95
P04 FAR SIDE CALENDAR 10。5
P05 NATURE CALENDAR 12。99
P06 SQL MAND REFERENCE 29。99
P07 BLACK LEATHER BRIEFCASE 99。99
456
…………………………………………………………Page 457……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
分析
这两个查询的结果是相同的 下边的部分将向您介绍对于脚本参数的另外一种向用户
提示的办法
ACCEPT
ACCEPT 可以在运行时允许用户向变量中输入数值 它所作的工作与没有 DEFINE 的
&相同 但它的可控性更好 它可以给用户一个更好友好的提示
下边的例子将从清除缓冲区开始
输入
SQL》 clear buffer
输出
buffer cleared
然后我们使用 INPUT 命令来向缓冲区中输入 SQL 语句 如果你输入语句时没有从
INPUT 开始 你开始会被提示为 NEWTITLE 输入一个值 当然 你也可以建立一个新文
件并在其中输入你的语句
输入
SQL》 input
1 accept newtitle prompt 'Enter Title for Report: '
2 ttitle center newtitle
3 select *
4 from products
5
SQL》 save prod
输出
File 〃prod。sql〃 already exists。
Use another name or 〃SAVE filename REPLACE〃。
分析
咦 这个文件怎么已经存在了 这就是说你已经有一个叫 PROD。SQL 的文件了 如果
你不想保留它 你可以使用覆盖选项来保存缓冲区中的内容 注意在上一个语句中的
457
…………………………………………………………Page 458……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
PROMPT 它将会向用户显示文本信息以准确地告诉用户应该输入什么
输入
SQL》 save prod replace
输出
Wrote file prod
现在你可以使用 START 命令来运行这个文件了
输入
SQL》 start prod
Enter Title for Report: A LIST OF PRODUCTS
输出
A LIST OF PRODUCTS
PRO PRODUCT_NAME UNIT_COST
P01 MICKEY MOUSE LAMP 29。95
P02 NO 2 PENCILS 20 PACK 1。99
P03 COFFEE MUG 6。95
P04 FAR SIDE CALENDAR 10。5
P05 NATURE CALENDAR 12。99
P06 SQL MAND REFERENCE 29。99
P07 BLACK LEATHER BRIEFCASE 99。99
7 rows selected。
分析
你输入的文字成了当前报表的题头
下边的例子向你显示了你如果替换在语句中的任何变量的值
输入
SQL》 input
1 accept prod_id prompt 'Enter PRODUCT ID to Search for: '
2 select *
3 from products
4 where product_id = '&prod_id'
5
SQL》 save prod1
458
…………………………………………………………Page 459……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输出
Created file prod1
输入
SQL》 start prod1
Enter PRODUCT ID to Search for: P01
输出
old 3: where product_id = '&prod_id'
new 3: where product_id = 'P01'
A LIST OF PRODUCTS
PRO PRODUCT_NAME UNIT_COST
P01 MICKEY MOUSE LAMP 29。95
分析
你可以在许多的需要中见到变量的使用 例如 为你想要重新定向输出的文件命名或
为 ORDER BY 子句指定一个表达式 其中的方法之一是使用变量替换 一种使用变量替换
的情况是在事务处理诊断报告中在 WHERE 子句中输入日期 如果你的查询设计成要求在
特定的时间内得到信息的话 你也许需要设置一个替换变量来与表中的 SSN 列进行比较
NEW_VALUE
NEW_VALUE 命令可以将 SELECT 语句中的数值返回给一个没有经你明确定义的变
量 语法格式如下
语法
COL'UMN' column_name NEW_VALUE new_name
你可以使用&符号来调用这个值 例如
&new_name
在 NEW_VALUE 命令中必须使用 COLUMN 命令
注意&符号与 COLUMN 在下边的 SQL*PLUS 文件中是一起使用的 在这个文件中出
现了 GET 命令
输入
SQL》 get prod1
459
…………………………………………………………Page 460……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输出
line 5 truncated。
1 ttitle left 'Report for Product: &prod_title' skip 2
2 col product_name new_value prod_title
3 select product_name; unit_cost
4 from products
5* where product_name = 'COFFEE MUG'
输入
SQL》 @prod1
输出
Report for Product: COFFEE MUG
PRODUCT_NAME UNIT_COST
COFFEE MUG 6。95
分析
PRODUCT_NAME 列的值已经通过 NEW_VALUE 方法被存入了变量 PROD_TITLE
中 该变量中的值将在稍后被 TTITLE 命令调用
对于在 SQL 中更多的变量信息 请参见第 18 天的 PL/SQL 简介 以及第 19 天的
TRANSACT SQL 简介
DUAL 表
DUAL 表是在每一个 ORACLE 数据库中都存在的虚拟表 它只有一个叫 DUMMY 的
列和一行值为 X 的数据 这个表可以由所有的用户出于通用的目标如进行计算 这时它可
以像一个计算器一样使用 或维护 SYSDATE 的格式而使用
输入
SQL》 desc dual;
输出
Name Null? Type
DUMMY VARCHAR2(1)
输入
SQL》 select * from dual
460
…………………………………………………………Page 461……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输出
D
X
让我们来看一对使用 DUAL 表的例子
输入
SQL》 select sysdate from dual;
输出
SYSDATE
08…MAY…97
输入
SQL》 select 2 * 2 from dual;
输出
2*2
非常简单 第一条语句从 DUAL 表中选择了 SYSDATE 以取得今天的日期 第二个例
子显示了如何用这个表来进行乘法计算 我们的答案是 2*2 的结果为 4
DECODE 函数
DECODE 函数是 SQL*PLUS 中众多功能强大的函数之一— — 也许它的功能是最强大
的 标准的 SQL 中没有过程函数 它是包括在如 COBOL 和 C 语言中的
DECODE 语句与程序语言中的 IF THEN 语句类似 对于复杂的报表来说灵活性是
必需的 DECODE 可以弥补标准的 SQL 与过程语言函数之间的缺陷
语法
DECODE(column1; value1; output1; value2; output2; output3)
语法中的例子是对 column1 列执行 DECODE 函数 如果 column1 有一个值为 value1
那么将会用 output1 来代替当前值 如果 column1 的值为value2 那么就会用 OUTPUT2 来
代替当前值 如果 column1 中哪两个值都不是 那么就会用 OUTPUT3 来代替当前值
实际应用的例子呢 我们先来对一个新表运行一下 SELECT 语句
输入
SQL》 select * from states;
461
…………………………………………………………Page 462……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输入
ST IL
IN OH
FL CA
KY NY
7 rows selected。
现在来用一下 DECODE 命令
输入
SQL》 select decode(state;'IN';'INDIANA';'OTHER') state from states;
输出
STATE OTHER
INDIANA OTHER
OTHER OTHER
OTHER OTHER
7 rows selected。
分析
符合条件 州为 IN 的记录只有一条 所以只有一行显示为 INDIANA 其它的记录
看上去都不符合 因为它们的显示为 OTHER
下边的例子为表中的每一个值提供了输入字符串 只有当你的州不在列表中时 你才