Oracle学习中遇到的问题及解决
1报错:.在学生表中插入出生日期是遇到的错误:ORA-01861: 文字与格式字符串不匹配
解决:
直接按照字符串方式,或者,直接使用to_date('1990-01-01'),没有指定日期格式,就会报错:ORA-01861: 文字与格式字符串不匹配须指定日期格式
to_date('1990-01-01' , 'yyyy-mm-dd hh24:mi:ss')
2.报错:在sc表中插入数据时:ORA-01658: unable to create INITIAL extent for segment in tablespace string。
解决:表空间大小不够,增加表空间即可(用于扩展已有的文件 ALTER DATABASE DATAFILE 'F:\作业们\oracle text\实验室考核\text_students.dbf' RESIZE 1024M; )
详情:https://blog.csdn.net/j080624/article/details/78731412
3.报错:ORA-00937:不是单组分组函数
探索:对于group by 语句,在查询出来的字段中,只能包含group by后面跟的字段以及分组函数,如果查询字段中有sum、count类似的聚合函数 那么其他字段必须要在group by 中出现再通俗的说 group by后面的字段 不能少于查询中的非聚合函数字段
但是,我发现在使用聚集函数的同时单条记录的部分属性不一定有查出来的意义
4.问题:如何给连接后的表起别名
5.问题:如何优化
6.收获:nul()函数作用:判断某个值是否为空值,若不为空值则输出,若为空值,返回指定值。
1、nvl()函数的格式如下:NVL(expr1,expr2);
2、含义是:如果oracle第一个参数为空那么显示第二个参数的值,如果第一个参数的值不为空,则显示第一个参数本来的值。
7.收获:外部连接运算符:
外连接运算符为“(+)” ,可以放在等号的左面,也可以放在等号的右面,但一定要放在缺少信息的那一面;仅适用于列,不能用在表达式上;不能与ON和IN操作符一起使用
8.问题:17.按平均成绩从高到低显示所有学生的所有课程的成绩以及平均成绩
9.收获:case函数对表达式expression进行测试,如果expression等于value1则返回returnvalue1.依次类推如果不符合条件的所有的when条件,就返回默认值defaultvalue。
可见case函数跟普通的switch case语句非常类似,使用case函数我们可以实现复杂的业务逻辑
用法:
case expression
when value1 then returnvalue1
when value2 then returnvalue2
when value3 then returnvalue3
else defaultvalue
end
10.报错:RA_01747:User.table.column 或列说明无效
解决:原因是因为表的列名称使用了Oracle声明的关键字
-
- 在查询列中使用双引号
- 要注意列的大小写
11.问题:18.查询各科成绩最高分、最低分和平均分
12.ORA-00932:数据类型不一致,应为DATE,但却获得NUMBER
13.优化:先进性选择在进行连接
14:待优化:无重复是选择最大:取前一条记录:where rownum<=1;
有重复时选最大:在子查询里先选出最大的,然后父查询查等于该值的记录
15.遗留问题:Oracle的时间运算