pl SQL面试题
pl sql都有什么命名块
过 程
函 数
触发器
游 标
pl sql 的for循环怎么写
for 循环变量 in 循环变量的开始值 ..循环变量的结束值
循环输出表类型里的数据,开始值表示类型是first结束值是last
orcale 中触发器有几种类型
dml触发器
dml是数据操作语句,包括数据库的增删改操作
语法:
create[or replace] tirgger 触发器名称
before/after 触发时机 before是数据操作之前 after 数据操作之后
delete/update/insert [of列名1,列名2,...]触发操作多个操作可以用or链接,后面还可以跟上数据表的列 of
列名
on
表名称触发对象
for each row 表示该触发器是行级触发器行级触发器针对每个表的行都会执行一遍触发器,语句级触发器
只会执行一次。
when 条件表达式 触发条件
begin
语句块;
end;
--创建表,让表结构参考某一个已经存在的表,如果不希望复制表数据,可以 --在sql查询后加一个永远不成立的条件 drop table dept_his; create table dept_his as select * from dept where 1=0; create or replace trigger tri_dept_his --触发时机 after -- 触发操作 delete on --触发对象 dept --是行级触发器 for each row begin --往历史表中插入用户删除的数据,获取用户删除的数据可以用old这个内置变量 --引用内置变量的时候要在内置变量前加冒号 insert into dept_his values(:old.deptno,:old.dname,:old.loc); 举例:写一个触发器,不让用户周六周日操作(增删改)部门表数据 触发器的执行顺序,一个表上有可能有行级触发器,有可能有语句级触发器: before 的语句级触发器 befroe的行级触发器 dml语句 after的行级触发器 after的语句级触发器 举例:部门编号为10的员工的基本工资不能降低,部门编号为20的员工信息不能删除 end; --测试 select * from dept; delete from dept where deptno=4; select * from dept_his;
替代触发器
替代视图增删改操作。视图可认为成逻辑上的一张表,类似把一个sql语句的执行结果永久的像表存存储在数据库中
--创建视图 ,存储部门编号,部门的平均工资,部门总人数,部门员工的最高工资 create view vi_dept as select d.deptno ,avg(e.sal) avg_sal,count(e.empno) emp_count,max(e.sal) emp_sal from dept d left join emp e on d.deptno=e.deptno group by d.deptno ; --删除视图 drop view vi_dept;
系统触发器
可以用系统触发器记录一些ddl的数据操或者是数据哭的登录 或者数据的登出操作
create or replace trigger tri_ddl_scott after ddl on scott.schema begin --往用户操作历史表插入数据 --可以通过数据库常量获取要插入的数据 insert into ddl_event values(sysdate,ora_login_user,ora_sysevent,ora_dict_obj_type, ora_dict_obj_name ); end;
过程和函数有什么区别,什么时候用过程,什么时候用函数
过程一般用与返回多个参数,函数返回用户一个值
在pl/sql中的作用是什么
包的作用用于封装,方便管理过程和函数
mybatis 和hibernate有什么区别
mybatis与hibernate一样是个orm数据库框架。有以下几点:
1. hibernate是全自动,而mybatis是半自动。
2. hibernate数据库移植性远大于mybatis。
3. hibernate拥有完整的日志系统,mybatis则欠缺一些。
4. mybatis相比hibernate需要关心很多细节
5. sql直接优化上,mybatis要比hibernate方便很多
6. 功能强大,数据库无关性好,O/R映射能力强。
7. 有更好的二级缓存机制,可以使用第三方缓存。
8. 缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好 Hibernate方面需要你的经验和能力都很强才行。
mybatis:
1. 入门简单,即学即用,提供了数据库查询的自动对象绑定功能。
2. 可以进行更为细致的SQL优化,可以减少查询字段。
3. 缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的, 工作量也比较大,而且不太容易适应快速数据库修改。
4.二级缓存机制不佳。
谈一下mybatis的优点
没有batis比JDB操作步骤多,
运行效率原声的jdbc高,
mybatis 在众多持久层架构中运行效率基本是最高的,
我们可以直接操作sql语句
唯一索引
oracle会自动在主键上创建一个索引。创建索引后就不能在索引作用的列上插入重复值
create unique index 索引名称(idx_开头) on数据库表(列名);
组合索引
一般经常在查询列放到前面,能提高命中率。
create index 索引名称 on 数据库表(列名1,列名2。。)
B树索引
当检索出的数据表占总表中数据数据不到10% 的时候, 并且该数据重复性较少的情况下,一般用B树索引。
位图索引
当数据成复性较多时推荐用位图索引
事物处理
原子性
数据库的增删该操作,要么全部成功要全部么失败
一致性
对于数据库的操作必须符合业务逻辑
持久性
数据操作应该是永久持久化到物理介质(硬盘)上