1. 存储过程和函数的区别
存储过程需要单独执行;
函数可以随处调用。 存储过程是保存起来的可以接受和返回用户提供的参数的
Transact-SQL
语句的集合。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 用户定义函数,它是返回值的已保存的
Transact-SQL
例程。用户定义函数不能用于执行一组修改全局数据库状态的操作。 与系统函数一样,用户定义函数可以从查询中唤醒调用。也可以像存储过程一样,通过
EXECUTE
语句执行。
自定义函数 有且只有一个返回值,就像普通的函数一样,可以直接在表达式中嵌入调用。
存储过程 可以没有返回值,也可以有任意个输出参数,必须单独调用。
1 存储过程不一定非要有返回值 数据库中的函数一定有返回值
2 存储过程在前台语言可以直接调用 而函数一般要有sql语句做为载体
本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。
函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少
1.
一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2.
对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
3.
存储过程一般是作为一个独立的部分来执行(EXEC执行),而函数可以作为查询语句的一个部分来调用(SELECT调用),由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
4.
当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure
cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。
2.
事务是什么?
数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作。
事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。通过将一组相关操作组合为一个要么全部成功要么全部失败的单元,可以简化错误恢复并使应用程序更加可靠。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。
3.
游标的作用?如何知道游标已经到了最后?
游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。
游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。
借助于游标来进行面向单条记录的数据处理。游标允许应用程序对查询语句select
返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作。
主语言是面向记录的,一组主变量一次只能存放一条记录。仅使用主变量并不能完全满足SQL语句向应用程序输出数据的要求。嵌入式SQL引入了游标的概念,用来协调这两种不同的处理方式,正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。
关系数据库中的操作会对整个行集起作用。由 SELECT 语句返回的行集包括满足该语句的 WHERE
子句中条件的所有行。这种由语句返回的完整行集称为结果集。应用程序,特别是交互式联机应用程序,并不总能将整个结果集作为一个单元来有效地处理。这些应用程序需要一种机制以便每次处理一行或一部分行。游标就是提供这种机制的对结果集的一种扩展。
游标的特点是:
允许定位在结果集的特定行。
从结果集的当前位置检索一行或一部分行。
支持对结果集中当前位置的行进行数据修改。
为由其他用户对显示在结果集中的数据库数据所做的更改提供不同级别的可见性支持。
提供脚本、存储过程和触发器中用于访问结果集中的数据的 Transact-SQL 语句
在从游标中提取信息后,可以通过判断@@FETCH_STATUS
的值来判断是否到了最后。当@@FETCH_STATUS为0的时候,说明提取是成功的,否则就可以认为到了最后。
4.
触发器分为事前触发和事后触发,这两种触发有和区别。语句级触发和行级触发有何区别
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作(
insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。
事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。通常事前触发器可以获取事件之前和新的字段值。
语句级触发器可以在语句执行前或后执行,而行级触发在触发器所影响的每一行触发一次。
分析:简单而言,事前触发主要是验证一些条件或进行一些准备工作,在表保存之前就触发,而事后触发则是进行收尾工作,保证事务的完整性,在表经过修改以后才触发。行级触发器是对DML语句影响的每个行执行一次,如UPDATE语句影响多行,就会对每行都激活一次触发器。而语句级触发器是对每个DML语句执行一次,如INSERT语句在表中即使插入了100多行,表上的INSERT语句级触发器也只会执行一次。
5.
ORACLE系统进程主要有哪些?作用是什么?
数据写进程(dbwr):负责将更改的数据从数据库缓冲区高速缓存写入数据文件
日志写进程(lgwr):将重做日志缓冲区中的更改写入在线重做日志文件
系统监控(smon) :检查数据库的一致性如有必要还会在数据库打开时启动数据库的恢复
进程监控(pmon) :负责在一个Oracle 进程失败时清理资源
检查点进程(chpt):负责在每当缓冲区高速缓存中的更改永久地记录在数据库中时,更新控制文件和数据文件中的数据库状态信息。
归档进程(arcn) :在每次日志切换时把已满的日志组进行备份或归档
作业调度器(cjq) :负责将调度与执行系统中已定义好的job,完成一些预定义的工作.
恢复进程(reco)
:保证分布式事务的一致性,在分布式事务中,要么同时commit,要么同时rollback;
6.
你必须利用备份恢复数据库,但是你没有控制文件,该如何解决问题?
重建控制文件,用带backup control file 子句的recover 命令恢复数据库。
7.
如何转换init.ora到spfile?
使用create spfile from pfile 命令
8.
解释data block, extent, segment(建议用英文术语)
data block是数据库中最小的逻辑存储单元。当数据库的对象需要更多的物理存储空间时,连续的data
block就组成了extent . 一个数据库对象拥有的所有extents被称为该对象的segment.
9.
给出两个检查表结构的方法
1.DESCRIBE命令
2.DBMS_METADATA.GET_DDL 包
10. 怎样查看数据库引擎的报错
alert log.
11. 请问ORACLE数据库的多层结构怎样解释
12. 现有sql
server数据库,要将起导入到ORACLE数据库中,其中Excel表格以附件形式存在sql
server数据库中,现在想将Excel表格中的数据一起导入到ORACLE数据库中,请写出你的思路?
13. 你最擅长ORACLE数据库中的哪一部分?
14.
随意说说你觉得ORACLE数据库中最有意思的部分或者最难得部分?
15.有两个表A和B,均有key和value两个字段,如果B的key在A 中也有,就把B的value换为A中对应的value这道题的SQL语句怎么写?
16.一百个账户各有100$,某个账户某天如有支出则添加一条新记录,记录其余额。一百天后,请输出每天所有账户的余额信息
17.建三个表,用一条SQL语句查处学生的总成绩,平均成绩和缺考的科目
18.某个表有两个字段(phone和sendtime)取出每个号码(phone)的最新发送时间(sendtime)的记录
19.一个表中的Id有多个记录,把所有这个id的记录查出来,并显示共有多少条记录数