友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
SQL 21日自学通(V3.0)(PDF格式)-第60部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
如果你使用了命令的可选项 那么可以是这个选项需要确定的关键字 在这个例子中是缺
少了关键字 AS 正确的语句如下
SQL》 create view emp_view as
2 select * from employee_tbl
3 /
Missing Left Parenthesis
输入
SQL》 @insert。sql
输出
SQL》 insert into people_tbl values
2 '303785523'; 'SMITH'; 'JOHN'; 'JAY'; 'MALE'; '10…JAN…50')
3 /
'303785523'; 'SMITH'; 'JOHN'; 'JAY'; 'MALE'; '10…JAN…50')
*
ERROR at line 2:
ORA…00906: missing left parenthesis
SQL》
分析
在第 2 行中圆括号没有出现 正确的语法应该如下
478
…………………………………………………………Page 479……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》 insert into people_tbl values
2 ('303785523'; 'SMITH'; 'JOHN'; 'JAY'; 'MALE'; '10…JAN…50')
3 /
Missing Right Parenthesis
输入
SQL》 @tblspc。sql
输出
SQL》 spool tblspc。lst
SQL》 set echo on
SQL》 set feedback on
SQL》 set pagesize 1000
SQL》 select substr(tablespace_name;1;15 a;
2 substr(file_name; 1;45) c; bytes
3 from sys。dba_data_files
4 order by tablespace_name;
select substr(tablespace_name;1;15 a;
*
ERROR at line 1:
ORA…00907: missing right parenthesis
SQL》 spool off
SQL》
分析
在第 1 行的 SUBSTR 中缺少右括号 正确的语法如下
SQL》 select substr(tablespace_name;1;15) a;
2 substr(file_name;1;45) c; bytes
3 from sys。dba_data_files
4 order by tablespace_name;
479
…………………………………………………………Page 480……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
Missing ma
输入
SQL》 @ezinsert。sql
输出
SQL》 spool ezinsert。lst
SQL》 set echo on
SQL》 set feedback on
SQL》 insert into office_tbl values
2 ('303785523' 'SMITH'; 'OFFICE OF THE STATE OF INDIANA; ADJUTANT GENERAL')
3 /
('303785523' 'SMITH'; 'OFFICE OF THE STATE OF INDIANA; ADJUTANT GENERAL')
*
ERROR at line 2:
ORA…00917: missing ma
SQL》 spool off
SQL》
分析
在第 2 行的 SMITH 与安全数字之间缺了逗号
Column Ambiguously Defined
输入
SQL》 @employee_tbl
输出
SQL》 spool employee。lst
SQL》 set echo on
SQL》 set feedback on
SQL》 select p。ssn; name; e。address; e。phone
2 from employee_tbl e;
480
…………………………………………………………Page 481……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
3 payroll_tbl p
4 where e。ssn =p。ssn;
select p。ssn; name; e。address; e。phone
*
ERROR at line 1:
ORA…00918: column ambigously defined
SQL》 spool off
SQL》
分析
在第一行中的 name 列没有定义 表已经被给了别名 e 和 p 根据它的别名可以决定使
用那一个表
SQL mand Not Properly Ended
输入
SQL》 create view emp_tbl as
2 select * from employee_tbl
3 order by name
4 /
输出
order by name
*
ERROR at line 3:
ORA…00933: SQL mand not properly ended
SQL》
分析
为什么命令没有正确地结束呢 你知道你可以使用 /来结束 SQL 语句 可以在 CREATE
VIEW 语句中是不能使用 ORDER BY 子句的 要用 GROUP BY 来代替 查询处理器要在
ORDER BY 子句之前寻找结束标志 分号或正斜线 ) 因为处理器认为 ORDER BY 不是
CREATE VIEW 的一部分 而由于在 ORDER BY 之前没有结束标志 所以错误返回并指明
是在 ORDER BY 子句所在行 Missing Expression
481
…………………………………………………………Page 482……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
输入
SQL》 @tables。sql
输出
SQL》 spool tables。lst
SQL》 set echo on
SQL》 set feedback on
SQL》 set pagesize 1000
SQL》 select owner|| '。' || table;
2 from sys。dba_tables
3 where owner = 'SYSTEM'
4 order by table_name
5 /
from sys。dba_tables
*
ERROR at line 2:
ORA…00936: missing expression
SQL》 spool off
SQL》
分析
注意在第一行的表后边的逗号 因为它 处理机制会认为在 SELECT 语句中还有其它
列 这时它不会去找 FROM 子句
Not Enough Arguments for Function
输入
SQL》 @tblspc。sql
输出
SQL》 spool tblspc。lst
SQL》 set echo on
SQL》 set feedback on
482
…………………………………………………………Page 483……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》 set pagesize 1000
SQL》 select substr(tablespace_name;1;15) a;
2 decode(substr(file_name;1;45)) c; bytes
3 from sys。dba_data_files
4 order by tablespace_name;
decode(substr(file_name;1;45)) c; bytes
*
ERROR at line 2:
ORA…00938: not enough arguments for function
SQL》 spool off
SQL》
分析
在 DECODE 函数中没有足够的参数 你需要检查你的解释器看一下它的正确语法
Not Enough Values
输入
SQL》 @ezinsert。sql
输出
SQL》 spool ezinsert。lst
SQL》 set echo on
SQL》 set feedback on
SQL》 insert into employee_tbl values
2 ('303785523'; 'SMITH'; 'JOHN'; 'JAY'; 'MALE')
3 /
insert into employee_tbl values
*
ERROR at line 1:
ORA…00947: not enough values
SQL》 spool off
483
…………………………………………………………Page 484……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
SQL》
分析
列值不存在 你需要执行 DESCRIBE 命令来找到丢失的列 你只可以向你所指定的列
中插入数值 如下例
输入 :
SQL》 spool ezinsert。lst
SQL》 set echo on
SQL》 set feedback on
SQL》 insert into employee_tbl (ssn; last_name; first_name; mid_name; sex)
2 values ('303785523'; 'SMITH'; 'JOHN'; 'JAY'; 'MALE')
3 /
Integrity Constraint Violated……Parent Key Not Found
输入
SQL》 insert into payroll_tbl values
2 ('111111111'; 'SMITH'; 'JOHN')
3 /
输出
insert into payroll_tbl values
*
ERROR at line 1:
ORA…02291: integrity constraint (employee_cons) violated parent
key not found
SQL》
分析
这个错误的原因是因为试图向一个表中插入数据 而对应的数据在父表中不存在时出
现 你需要查询父表中是否有正确的数据 如果没有 你必须在向子表中插入数据之前先
向它的父表中插入数据
484
…………………………………………………………Page 485……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
Oracle Not Available
输入
(sun_su3)/home》 sqlplus
SQL*Plus: Release 3。2。3。0。0 Production on Sat May 10 11:19:50 1997
Copyright (c) Oracle Corporation 1979; 1994。 All rights reserved。
Enter user…name: rplew
Enter password:
输出
ERROR: ORA…01034: ORACLE not available
ORA…07318: smsget: open error when opening sgadef。dbf file。
分析
你没有得到 SQL*PLUS 的提示 数据库可能当掉了 检查数据库的状态 同样 如果
你在访问多个数据库的话你要确认你的连接是正确的
Inserted Value Too Large for Column
输入
SQL》 @ezinsert。sql
输出
SQL》 spool ezinsert。lst
SQL》 set echo on
SQL》 set feedback on
SQL》 insert into office_tbl values
2 ('303785523'; 'SMITH'; 'OFFICE OF THE STATE OF INDIANA; ADJUTANT
GENERAL')
3 /
insert into office_tbl values
*
ERROR at line 1:
485
…………………………………………………………Page 486……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
ORA…01401: inserted value too large for column
SQL》 spool off
SQL》
分析
要插入的数值对于列来说太大 在表中使用 DESCRIBE 命令来更正数据的长度 如
有必要 你可以执行 ALTER TABLE 命令来长宽表的列宽
TNS:listener Could Not Resolve SID Given in Connect
Descriptor
输入
SQLDBA》 connect rplew/xxxx@database1
输出
ORA…12505: TNS:listener could not resolve SID given in connect descriptor
SQLDBA》 disconnect
Disconnected。
SQLDBA》
分析
在 ORACLE 数据库中这个错误很常见 listener 在请求客户与远程服务通讯时产生了
错误 这里是你试图连接数据库 不论是数据库名字错误还是 LISTENER 当掉都是有可能
的 你检查一个数据库的名字 然后再输入一次 如有必要 将这个问题告知数据库管理
员
Insufficient Privileges During Grants
输入
SQL》 grant select on people_tbl to ron;
输出
grant select on people_tbl to ron
*
486
…………………………………………………………Page 487……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
ERROR at line 1:
ORA…01749: you may not GRANT/REVOKE privileges to/from yourself
SQL》
输入
SQL》 grant select on demo。employee to ron;
输出
grant select on demo。employee to ron
*
ERROR at line 1:
ORA…01031: insufficient privileges
SQL》
这个错误出现在当你试图授予其它的用户表权限而你没有这么做的权利时出现 你必
需有表授权权限才可以 在 Oracle 中你的权限选项是管理员选项 这就是说你有将指定的
权限授予其它用户的能力 请检查你的解释器以找到特定的授权选项
Escape Character in Your Statement……Invalid Character
当你在调试 SQL 语句时不能使用脱字符 这种情况在你输入了 SQL 语句到缓冲区或
文件中以后使用退格键时产生 有时退格键会在你的语句中输入不合法的字符 这要根据
你的具体的键盘情况而定 尽管你看不到这些字符
Cannot Create Operating System File
这个错误的产生有好几个原因 最常见的原因是磁盘满了或文件系统的许可权不正确
如果磁盘满了 你必须删除一些不需要的文件 如果是权限不正确 请正确地设置它们
这个错误更可能是操作系统的错误 所以你需要征询系统管理员的建议
mon Logical Mistakes
到现在我们已经讨论了全部的在 SQL 语句中的实际上的错误信息 它们中的大多数很
明显 也很容易断定 下边的错误更可能是逻辑错误 它们在稍后产生问题 — — 不是马上
487
…………………………………………………………Page 488……………………………………………………………
SQL 21 日自学通(V1。0) 翻译人 笨猪
Using Reserved Words in Your SQL statement
输入
SQL》 select sysdate DATE from dual;
输出
select sysdate DATE
*
ERROR at line 1:
ORA…00923: FROM keyword not found where expected
分析
在这个例子中查询处理器并不会处理 DATE 字 因为它是一个保留字 由于在SYSDATE
后边没有逗号 所以处理认为下一个子句应该是 FROM
输入
SQL》 select sysdate 〃DATE〃
2 from dual;
输出
DATE
15…MAY…97
分析
注意在这里是如何解决保留字问题的— — 用双引号将它括起来 它可以让你将 DATE
作为别名字符串处理
注 你应该检查你的数据库文档中的保留字列表 因为不同的解释器中的保留字是不同的
当对一个列使用别名时你可能使用双引号也可能不使用 在下边的例子中你就不必使
用双引号 因为 TODAY 不是一个保留字 所以应该检查你的解释器再进行判断
输入
SQL》 select sysdate TODAY
2 from dual;
输出
TODAY
15…MAY…97
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!