按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
OUTPUT
1 row updated。
分析
EMPLOYEE 表中有一个雇员的名字是不正确的 我们只有当薪水表中出现的错误的 ID
277
…………………………………………………………Page 278……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
时才会更新雇员表
INPUT/OUTPUT
SQL》 UPDATE EMPLOYEE_TABLE
SET HOURLY_PAY = 'HOURLY_PAY * 1。1
WHERE EMPLOYEE_ID = (SELECT EMPLOYEE_ID
FROM PAYROLL_TBL
WHERE EMPLOYEE_ID = '222222222');
1 row updated。
分析
我们将该雇员的小时报酬增加了 10%
INPUT/OUTPUT
SQL》 DELETE FROM EMPLOYEE_TBL
WHERE EMPLOYEE_ID = (SELECT EMPLOYEE_ID
FROM PAYROLL_TBL
WHERE EMPLOYEE_ID = '222222222';
1 row deleted。
分析
我们将雇员 ID 号为 222222222 的雇员删除了
在执行前测试选择语句
如果你正在创建报表 比如你使用的是 SQL*PLUS 而且报表是比较大的 你也许会
想在运行之前先检查一个空格 列 标题 这会浪费你许多的时间 一个比较好的检查方
法是在你的 SQL 语句中使用 add where rownum 《 3
SYNTAX
SQL》 select *
from employee_tbl
where rownum 《 5
分析
这时你可以得到表中的前四行 用它你可以检查是否拼写 空格和看起是否合适 否
278
…………………………………………………………Page 279……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
则 在你发现报表中的拼写错误或不正确的空格时你的报表已经返回了成百上千行
技巧 实现你的顾客的真正的需要是你的一项重要的工作 它大概会占你所有工作中的一
半 在特定的工作中拥有好的沟通手段和知识将会是你编程技能的有益补充 例如
如果你为一个小汽车代理商工作 它的经理想要知道在未来一段时间内他将会有多
少小汽车进帐 你认为 只是你自己 对此进行计数将会很好 他问的是他有多
少小汽车 但是 其实经理人真正想知道的是他有多少种类型的汽车 小汽车 卡
车 汽车的型号 生产的时间等等 是不是他的要求会浪费你许多的时间 或者说
你给他的是不是他所需要的
嵌入型 SQL
本书中的嵌入型 SQL 这一术语在用 SQL 来编写大型程序时经常用到 它的意思就是
可以将存贮过程嵌入到数据库之中并且它可以被应用程序来调用以处理一些任务 一些数
据库系统提供了一整套的工具可以让你将 SQL 与程序设计语言结合在一起用以创建简单的
屏幕和菜单对象 SQL 代码被嵌入到这些代码之中
静态 SQL 与动态 SQL
静态 SQL 的意思就是指在程序中直接写入 SQL 代码 这些代码在运行的时候不能被
更新 事实上 大多数静态 SQL 解释器需要将你的 SQL 语句在运行之前进行预编译处理
ORACLE 7 与 INFORMIX 都为他们的数据库系统开发了静态 SQL 包 这些经过预编译的
产品可以在几种语言环境中使用 主要有以下几种语言
l C
l PASCAL
l ADA
l COBLE
l FORTRAN
静态 SQL 的好处在于
l 提高运行时的速度
l 经过了编译错误检查
279
…………………………………………………………Page 280……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
它的缺点是
l 灵活性差
l 需要更多的代码 因为查询不能在运行时进行变更
l 它对于其它的数据库系统来说使用起来不方便 这一因素你必须要考虑到
如果你将这些代码打印出来的话 SQL 的语言将会出现在 C 语言的代码 或者是你所
使用的那种语言 在进行预编译处理时字段要受到程序变量的限制 例 13。11 是一个简单
的静态 SQL 的使用实例
动态 SQL 是另外一种方法 它可以让程序员在运行时构建 SQL 语句并把这些语句提
交给数据库引擎 引擎再将数据返回给程序变量 这也是在运行时实现的 这一主题已经
在第 12 天进行过非常彻底的讨论了
例 13。11
本例给出了静态 SQL 的 C 语言中的使用方法 注意到这里的语法并不是完全依照 ANSI
标准来实施的 静态 SQL 不同于任何商业化的产品 尽管它的语法与商业化的产品类似
INPUT:
BOOL Print_Employee_Info (void)
{
int Age = 0;
char Name'41' = 〃0〃;
char Address'81' = 〃0〃;
/* Now Bind Each Field We Will Select To a Program Variable */
#SQL BIND(AGE; Age)
#SQL BIND(NAME; Name);
#SQL BIND(ADDRESS; Address);
/* The above statements 〃bind〃 fields from the database to variables from the program。
After we query the database; we will scroll the records returned
and then print them to the screen */
#SQL SELECT AGE; NAME; ADDRESS FROM EMPLOYEES;
#SQL FIRST_RECORD
280
…………………………………………………………Page 281……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
if (Age == NULL)
{
return FALSE;
}
while (Age != NULL)
{
printf(〃AGE = %dn; Age);
printf(〃NAME = %sn; Name);
printf(〃ADDRESS = %sn〃; Address);
#SQL NEXT_RECORD
}
return TRUE;
}
分析
当你输入你的代码并把它们保存到文件之中以后 这些代码通常要经过某种类型的预
编译处理方可运行 预编译会将带有#SQL 的指令转换为真正在 C 代码指令 然后将它与
你其它的 C 语言代码一同编译
如果你从来没有看过或写过 C 语言的程序 那么不要对例 13。11 中的语法过份留心 在
早些时候 静态的 SQL 只是一些伪指令 请参阅在你的产品中的关