《SQL 21日自学通(V3.0)(PDF格式)》第149章


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》 
分析 
这个错误的原因是因为试图向一个表中插入数据 而对应的数据在父表中不存在时出 
现 你需要查询父表中是否有正确的数据
小说推荐
返回首页返回目录