ex11游标与存储过程答案
oracle模拟试题答案汇总

第1题,选择题(2分):ORACLE中,游标可以分为三类,下面不是Oracle游标的是(1 )。
(1) 系统游标(2) 显式游标(3) 隐式游标⑷REF游标CURSOR 第2题,选择题(2分):PL/SQL块中定义了一个带参数的游标emp_cursor(d num NUMBER) ISSELECT sal,comm FROM emp WHERE dept no=d num;那么正确打开此游标的语句是(1)(1) OPEN emp_cursor(20);(2) OPEN emp_cursor FOR 20;(3) OPEN emp_cursor USING 20;(4) FOR rmp_rec IN emp_cursor[20] LOOP ... END LOOP;第3题,选择题(2分):有关ORACLE索引说法正确的是(A )(1) 索引的数据和表的数据分开存储,但索引组织表除外(2) 所有索引中的数据是顺序排序(3) 分区表的索引必须统一存储(4) 只能对分区表的索引进行分区第4题,选择题(2分):下列有关包的使用说法错误的是(A)(1) 必须先创建包头,然后创建包体(2) 在不同的包内模块可以重名(3) 包的私有过程不能被外部程序调用(4) 包体中的全局过程和函数必须在包第5题,选择题(2分):以下定义的哪个变量是非法的?( A)(1) var_ab nu mber default:=1; var_ab nu mber default 1;(2) var_ab nu mber not n ull :='0';(3) var_ab nu mber;(4) var_ab nu mber:=3;第6题,选择题(2分):PL/SQL块中不能直接使用的SQL命令是(A)(1) drop(2) in sert(3) update(4) select第7题,选择题(2分):下列有关函数的特点说法错误的是(1)(1) 函数的调用应使用EXECUTE命令(2) 函数必须定义返回类型(3) 函数参数的类型可以是OUT(4) 在函数体内可以多次使用RETURN语句第8题,选择题(2分):函数to_char(to_date('65-10-21','yy-mm-dd'),'yyyy-mm-dd') 的返回值是(1)。
数据库视图,索引,序列,触发器游标,存储过程相关的面试题和笔试题

数据库视图,索引,序列,触发器游标,存储过程相关的面试题和笔
试题
数据库视图,索引,序列,触发器游标,存储过程相关的面试题和笔试题
问题:数据库视图,索引,序列,触发器游标,存储过程相关的面试题和笔试题回答:
1.在SQL数据库中,关于视图的说法错误的是:()
A 用户可以用SQL语言对视图操作
B 视图是从一个或多个基本表导出的表,用户不可以在视图上再定义视图
C 面向用户的模式对应于视图和部分基本表
D 视图并不对应于存储在数据库中的文件,因此视图实际是一个“虚表”
1. 请回答,视图是什么?
2. 请回答,索引是什么?
3. 如果数据数量比较大,数据库如何进行优化?
4. 请回答,游标有什么作用?如何知道游标已经到了最后?
5. 请回答,触发器是什么?
6. 请写一个创建insert , update触发器的例子?
7. 请写一个创建delete 触发器的例子?
8. 请回答,存储过程是什么,他有什么优点?。
oracle11g游标及触发器相关知识

oracle11g 游标:1. 当在PL/SQL中使用SQL语句时,Oracle会为其分配上下文区域,这是一段私有的内存区域,用于暂时保存SQL语句影响到的数据。
游标是指向这段内存区域的指针。
2. Oracle中主要有两种类型的游标:(1) 隐式游标:所有的DML语句和PL/SQL SELECT 语句都有;(2) 显式游标:由开发人员声明和控制。
3. 可以使用的游标属性包括四种:%ROWCOUNT、%FOUND、%NOTFOUND、%ISOPEN,这四种属性对于显式游标和隐式游标都有用,但是含义和使用方法略有不同。
游标在使用属性时,需要以游标名称作为前缀,以表明该属性是哪个游标的,隐式游标没有名称,所以在使用隐式游标时采取了统一的一个名称SQL。
4. 在PL/SQL中的SELECT语句只能且必须取出一行数据,取出多行或者零行都被认为是异常,所以在对多行数据进行操作时,必须使用显式游标来实现。
5. 使用显式游标的步骤:(1)声明游标:CURSOR cursor_name is select_statement;(2)打开游标:OPEN cursor_name;(3)取游标中的数据:FETCH cursor_name INTO variable1,variable2,...;(4)关闭游标:CLOSE cursor_name;6.用变量接收游标中的数据sql> declarev_name emp.ename%TYPE;v_sal emp.sal%TYPE;cursor emp_cursor is select ename,sal from empwhere deptno=10;beginopen emp_cursor;loopfetch emp_cursor into v_name,v_sal;exit when emp_cursor%NOTFOUND;dbms_output.put_line(v_name || ‘的薪水是’ || v_sal);end loop;dbms_output.put_line(‘共取出了’ || emp_cursor%ROWCOUNT || ‘条记录’);close emp_cursor;end;7.通常简单LOOP循环与%NOTFOUND属性配合使用,而WHILE循环与%FOUND属性配合使用。
MySQL数据库技术及应用 课后习题答案 (5)[3页]
![MySQL数据库技术及应用 课后习题答案 (5)[3页]](https://img.taocdn.com/s3/m/66de8665326c1eb91a37f111f18583d049640f85.png)
项目5一、选择题1、C2、B3、D4、A5、C6、A7、B8、C9、B10、D二、填空题1、系统变量用户变量局部变量2、BEGIN…END3、DELIMITER4、FOR EEACH ROW5、自动事务手动事务6、START TRANSACTION COMMIT三、判断题1、对2、对3、对4、错5、对6、对四、简答题1、答:存储过程具有如下优点:(1)模块化编程,代码可复用性好。
(2)具有更快的执行速度。
(3)减少网络通信量。
(4)增强系统的安全性。
存储过程与存储函数的区别如下4点:(1)语法中实现的标识符不同,存储过程使用PROCEDURE,函数为FUNCTION。
(2)存储过程在创建时没有返回值,而函数在定义时必须设置返回值。
(3)存储过程没有返回值类型,且不能将结果直接赋值给变量;而函数定义时需要设置返回值类型,且在调用时除在SELECT中,必须将返回值赋给变量。
(4)存储过程必须通过CALL进行调用,不能使用SELECT调用;而函数则可在SELECT 语句中直接使用。
2、答:游标的作用:游标提供了一种对SELECT语句结果集进行访问的机制。
可以将游标理解为一个在结果集中可以逐行移动的指针,它指向结果集中的某一行,用户可以用SQL 语句逐一从游标中获取记录,从而有选择地按行进行操作,而不是只能对整个结果集进行操作。
游标的使用主要包括声明游标、打开游标、移动游标指针并从游标结果集中读取数据和关闭游标4个步骤。
3、答:触发器是一种特殊的存储过程,主要用于保证数据的完整性和强制使用业务规则。
触发器具有以下优点:(1)触发器可以实现对数据库中的相关表的级联操作;(2)触发器可以用来定义比CHECK约束更复杂的限制;(3)触发器可以用来定义错误信息;(4)触发器可以用来实现更精细和更复杂的数据操作。
4、答:根据激活触发器时机的不同,MySQL触发器可以分为BEFORE触发器和AFTER 触发器两种类型。
中南大学数据库题库数据库错题

中南大学数据库题库数据库错题SQL Server 中的存储过程具有5种类型。
[参考答案]正确存储过程的输出结果可以传递给一个变量。
[参考答案]正确触发器是可在程序中被调用执行。
[参考答案]错误存储过程使代码具有重用性。
[参考答案]正确触发器不能被调用,它可以自动执行。
[参考答案]正确通过语句ALTER PROCEDURE修改存储过程与删除存储过程然后再新建一个同名存储过程的效果是相同的。
[参考答案]错误触发器主要用于强制复杂的__1__或要求。
参考答案1:业务规则创建存储过程实际是对存储过程进行定义的过程,主要包含存储过程名称、__1__和存储过程的主体部分。
参考答案1:参数存储过程是一种数据库对象,将一组SQL语句和控制流语句的集合以一个存储单元的形式保存在__1__上。
参考答案1:服务器为了保证数据库应用系统正常运行,数据库管理员在日常工作中需要对数据库进行维护。
下列一般不属于数据库管理员日常维护工作的是A 数据内容的一致性维护B 数据库备份与恢复C 数据库安全性维护D 数据库存储空间管理参考答案C执行Unload Form1语句后,窗体Form1消失,但仍在内存中。
[参考答案]错误在SQL Server 2000中,某数据库用户User在此数据库中具有对于表数据的查询和更改权限。
现要收回User对于T表的数据更改权,下述是实现该功能的语句,请补全该语句(__1__)UPDATE ON T FROM User参考答案1:REVOKE某事务从账户A转出资金并向账户B转入资金,此操作要么全做,要么全不做。
为了保证该操作的完整,需要利用到事务性质中的(__1__)性.参考答案1:原子事务是由一系列操作组成的,事务的执行表现为事务中各个操作的执行。
每个事务应具有结束操作。
当一个事务需要终止并取消所有已执行的数据修改时应执行的语句是(__1__)参考答案1:ROLLBACK在窗体上画一个命令按钮,名称为Command1。
Oracle笔试题库附参考答案

Oracle笔试题库附参考答案1.下列不属于ORACLE的逻辑结构的是(C)1. 区2. 段3. 数据⽂件4. 表空间2. 下⾯哪个⽤户不是ORACLE缺省安装后就存在的⽤户(A)A . SYSDBAB. SYSTEMC. SCOTTD. SYS3 下⾯哪个操作会导致⽤户连接到ORACLE数据库,但不能创建表(A)1. 授予了CONNECT的⾓⾊,但没有授予RESOURCE的⾓⾊2. 没有授予⽤户系统管理员的⾓⾊3. 数据库实例没有启动4. 数据库监听没有启动1. ( )函数通常⽤来计算累计排名,移动平均数和报表聚合。
A . 汇总B. 分析C 分组、D 单⾏1. 带有(B)字句的SELECT语句可以在表的⼀⾏或多⾏放置排他锁。
A . FOR INSERTB. FOR UPDATEC. FOR DELETED. FOR REFRESH1. 在Oracle中,你以SYSDBA登录,CUSTOMER表位于Mary⽤户⽅案中,下⾯哪条语句为数据库中的所有⽤户创建CUSTOMER表的同义词(B)。
1. CREATE PUBLIC SYNONYM cust ON mary.customer;2. CREATE PUBLIC SYNONYM cust FOR mary.customer;3. CREATE SYNONYM cust ON mary.customer FOR PUBLIC;4. 不能创建CUSTOMER的公⽤同义词。
5.7. 在Oracle中,当FETCH语句从游标获得数据时,下⾯叙述正确的是(C)。
1. 游标打开2. 游标关闭3. 当前记录的数据加载到变量中4. 创建变量保存当前记录的数据8. 在Oracle中,下⾯关于函数描述正确的是(AD)。
1. SYSDATE函数返回Oracle服务器的⽇期和时间2. ROUND数字函数按四舍五⼊原则返回指定⼗进制数最靠近的整数3. ADD_MONTHS⽇期函数返回指定两个⽉份天数的和4. SUBSTR函数从字符串指定的位置返回指定长度的⼦串9. 阅读下⾯的PL/SQL程序块:BEGININSERT INTO employee(salary,last_name,first_name)VALUES(35000,’Wang’,'Fred’);SAVEPOINT save_a;INSERT INTO employee(salary,last_name,first_name)VALUES(40000,’Woo’,'David’);SAVEPOINT save_b;DELETE FROM employee WHERE dept_no=10;SAVEPOINT save_c;INSERT INTO employee(salary,last_name,first_name)VALUES(25000,’Lee’,'Bert’);ROLLBACK TO SAVEPOINT save_c;VALUES(32000,’Chung’,'Mike’);ROLLBACK TO SAVEPOINT save_b;COMMIT;END;运⾏上⾯的程序,哪两个更改永久保存到数据库(CD)。
ORCALE11G 期末试题及答案A

学年第 一 学期期末考试试题(卷)
专业: 班级: 姓名: 学号:
装 订 线 装 订 线 以 内 不 准 作 任 何 标 记 装 订 线
学院
课程考试参考答案与评分标准
学年第一学期
课程名称:ORCALE 考试性质:考查试卷类型:A
考试班级:计科考试方法:命题教师:
一、选择(每题2分,共30分)
DBBBA,DCCBD,CBCAB
二、判断(每题2分,共20分)
YNNYY,YYNNY
三:简答题(每题5分,共10分)
1、脏缓存块、空闲缓存块、命中缓存块
2、自动生成数据
强制复杂的完整性约束
自定义复杂的安全权限
提供审计和日志记录
启动复杂的业务逻辑
四、读程题(每题10分,共20分)
1、12,9,6,3
2、1的平方是1;2的平方是4;3的平方是9;4的平方是16;5的平方是25;五:(每题10分,共20分)
1.Create procedure sp_proc is
Begin
Dbms_output.putline(”hello world”);
End;
/
2、Create or replace trigger tg_md before
Update
On emp
For each row
Begin
Update DEPT
Set deptno=:new.deptno where deptno=:old.deptno;
End;。
oracle11试题及答案

oracle11试题及答案1. Oracle数据库的默认端口号是多少?- A. 1521- B. 1433- C. 3306- D. 5432答案: A2. 以下哪个不是Oracle数据库的组成部分?- A. 数据库实例- B. 数据文件- C. 控制文件- D. 索引文件答案: D3. 在Oracle中,哪个命令用于查看当前用户?- A. `SELECT USER FROM DUAL;`- B. `SELECT CURRENT_USER FROM DUAL;`- C. `SELECT SESSION_USER FROM DUAL;`- D. `SELECT USER_ID FROM DUAL;`答案: B4. Oracle数据库中,用于创建表的SQL语句是什么? - A. `CREATE DATABASE TABLE;`- B. `CREATE TABLE;`- C. `CREATE DATABASE;`- D. `CREATE TABLES;`答案: B5. 在Oracle中,如何添加新列到已存在的表中?- A. `ALTER TABLE table_name ADD column_name datatype;` - B. `ADD COLUMN table_name column_name datatype;`- C. `CREATE COLUMN table_name column_name datatype;`- D. `INSERT COLUMN table_name column_name datatype;` 答案: A6. Oracle数据库中,用于删除表的SQL命令是什么?- A. `DELETE TABLE table_name;`- B. `REMOVE TABLE table_name;`- C. `DROP TABLE table_name;`- D. `UNLOAD TABLE table_name;`答案: C7. 在Oracle数据库中,如何给表添加主键约束?- A. `ALTER TABLE table_name ADD CONSTRAINTconstraint_name PRIMARY KEY (column_name);`- B. `ALTER TABLE table_name PRIMARY KEY (column_name);` - C. `ADD PRIMARY KEY TO table_name (column_name);`- D. `SET PRIMARY KEY ON table_name (column_name);` 答案: A8. Oracle数据库中,用于查询数据库中所有表的SQL命令是什么? - A. `SELECT * FROM ALL_TABLES;`- B. `SELECT * FROM USER_TABLES;`- C. `SELECT * FROM TABLES;`- D. `SELECT * FROM ALL_TABLE;`答案: B9. 在Oracle中,如何查看表的结构?- A. `DESCRIBE table_name;`- B. `EXPLAIN table_name;`- C. `SHOW TABLE table_name;`- D. `SELECT * FROM table_name;`答案: A10. Oracle数据库中,用于更新表中数据的SQL命令是什么?- A. `UPDATE table_name SET column_name = 'value' WHERE condition;`- B. `CHANGE table_name SET column_name = 'value' WHERE condition;`- C. `MODIFY table_name SET column_name = 'value' WHERE condition;`- D. `ALTER TABLE table_name SET column_name = 'value' WHERE condition;`答案: A。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验十一游标与存储过程(1)创建游标,逐行显示表Customer.的记录,并用WHILE结构来测试@@Fetch_Status的返回值。
输出格式如下:'客户编号'+'-----'+'客户名称'+'----'+'客户地址'+'-----'+'客户电话'+'------'+'客户邮编'+'------'DECLARE cur_cust SCROLL cursor FORSELECT*FROM customerDECLARE @p_CustId char(5)DECLARE @p_CustName char(20)DECLARE @p_address char(40)DECLARE @p_Tel char(10)DECLARE @p_Zip char(6)DECLARE @p_All char(100)SELECT @p_All='客户编号'+'------'+'客户名称'+'------'+'客户地址'+'-------------------------------------'+'客户电话'+'-------'+'客户邮编'+'------'PRINT @p_AllOPEN cur_custFETCH cur_cust into @p_CustId,@p_CustName,@p_address,@p_Tel,@p_Zip WHILE(@@fetch_status<>-1)BEGINSELECT @p_All=@p_CustId+' '+@p_CustName+@p_address+@p_Tel+' '+@p_Zipprint @p_AllFETCH cur_cust into @p_CustId,@p_CustName,@p_address,@p_Tel,@p_Zip ENDPRINT'客户数目: '+CONVERT(char(5),@@CURSOR_ROWS)CLOSE cur_custDEALLOCATE cur_cust(2)利用游标修改OrderMaster表中Ordersum的值。
update ordermasterset ordersum=0declare @orderno char(12)declare @total numeric(9,2)declare cur_orderdetail scroll cursor forselect orderno,sum(quantity*price)from orderdetailgroup by ordernoopen cur_orderdetailfetch next from cur_orderdetail into @orderno,@total while(@@fetch_status=0)beginupdate ordermaster set ordersum=@totalwhere orderno=@ordernofetch next from cur_orderdetail into @orderno,@total endclose cur_orderdetaildeallocate cur_orderdetailselect*from ordermaster(3)创建游标,要求:输出所有女业务员的编号、姓名、性别、部门、职务、入职日期工资。
declare @emp_no char(5),@emp_name char(10),@sex char(1),@dept char(4) declare @date_hired datetime,@salary int,@text char(100)declare female_emp_cur cursor forselect employeeno,employeename,sex,department,hiredate,salaryfrom employee where sex='F'select @text='==================女业务员情况列表================='print @textselect @text=' 编号姓名性别部门职务入职日期工资'print @textselect @text='--------------------------------------------------'print @textopen female_emp_curfetch female_emp_cur into@emp_no,@emp_name,@sex,@dept,@date_hired,@salarywhile(@@fetch_status=0)beginselect @text=@emp_no+' '+@emp_name+' '+@sex+' '+@dept+' '+''+convert(char(4),year(@date_hired))+convert(char(2),month(@date_hire d))+' '+convert(char(6),@salary)print @textfetch female_emp_cur into@emp_no,@emp_name,@sex,@dept,@date_hired,@salaryendclose female_emp_curdeallocate female_emp_cur(4)创建存储过程,要求:按表定义中的CHECK约束自动产生员工编号。
create procedure createEmployeeNo(@sYear char(4),@sEmployeeNo char(8) output)asbegindeclare @employeeNo char(8),@num intdeclare @sNum char(3)select @employeeNo=max(employeeNo)from Employeewhere employeeNo like'E'+@sYear+'%'set @num=isnull(convert(int,right(@employeeNo,3)),0)+1if @num<10set @sNum='00'+convert(char(1),@num)elseif @num<100set @sNum='0'+convert(char(2),@num)elseset @sNum=convert(char(3),@num)set @sEmployeeNo='E'+@sYear+@sNumendgodeclare @sEmployeeNo char(8)execute createEmployeeNo'2006',@sEmployeeNo outputselect @sEmployeeNo 员工编号结果:(5)创建存储过程,要求:查找姓“李”的“职员”的员工编号、订单编号、销售金额。
create procedure employee_tot @e_name varchar(10),@e_headship varchar(10)asbegindeclare @emp_no char(10),@order_no char(12),@order_sum char(9) declare @text char(100)declare get_tot cursor forselect employeeno,b.orderno,ordersumfrom employee a,ordermaster bwhere employeename like @e_name and headship=@e_headship and a.employeeno=b.salernoselect @text='员工编号订单编号销售金额'print @textopen get_totfetch get_tot into @emp_no,@order_no,@order_sumwhile(@@fetch_status=0)beginselect @text=@emp_no+' '+@order_no+' '+@order_sumprint @textfetch get_tot into @emp_no,@order_no,@order_sumendclose get_totdeallocate get_totendgoexec employee_tot @e_name='李%', @e_headship='职员'(6)创建存储过程,要求:统计每个业务员的总销售业绩,显示业绩最好的前3位业务员的销售信息。
create procedure emp_totasbegindeclare@emp_no char(8),@emp_name char(10),@order_num numeric(9,2) declare@pro_no char(9)declare @text varchar(100),@count intset @count=0select @text='=======业绩最好的前三位业务员的销售信息================' print @textselect @text='业务员编号业务员姓名总销售业绩'print @textdeclare get_tot cursor forselect employeeno,employeename,sum(ordersum)from employee a,ordermaster bwhere a.employeeno=b.salernogroup by employeeno,employeenameorder by sum(ordersum)descopen get_totfetch get_tot into @emp_no, @emp_name,@order_numwhile(@@fetch_status=0)beginselect @text=@emp_no+' '+ @emp_name+''+convert(char(10),@order_num)print @textset @count=@count+1if @count<3fetch get_tot into @emp_no, @emp_name,@order_numelsebreakendclose get_totdeallocate get_totendgoexec emp_tot(7)创建存储过程,要求将大客户(销售数量位于前5名的客户)中热销的前3种商品的销售信息按如下格式输出:=======大客户中热销的前种商品的销售信息================商品编号商品名称总销售金额P2******* Pentium100CPU 22400.00P2******* Pentium主板 15130.00P2******* 17寸显示器 10600.00create procedure cus_totasbegindeclare @prod_no char(9),@prod_name char(20),@order_num numeric(9,2) declare @text varchar(100),@count intset @count=0select @text='=======大客户中热销的前种商品的销售信息================' print @textselect @text='商品编号商品名称总销售金额'print @textdeclare get_tot cursor forselect a.productNo,productName,sum(quantity*price)from Product a,OrderDetail b,(select top 5a.customerNo,customerName,sum(orderSum)客户总金额from Customer a,OrderMaster bwhere a.customerNo=b.customerNogroup by a.customerNo,customerNameorder by sum(orderSum)desc)c,OrderMaster dwhere a.productNo=b.productNo and c.customerNo=d.customerNo and b.orderNo=d.orderNogroup by a.productNo,productNameorder by sum(quantity*price)descopen get_totfetch get_tot into @prod_no, @prod_name,@order_numwhile(@@fetch_status=0)beginselect @text=@prod_no+' '+ @prod_name+''+convert(char(10),@order_num)print @textset @count=@count+1if @count<3fetch get_tot into @prod_no, @prod_name,@order_numelsebreakendclose get_totdeallocate get_tot endgoexec cus_tot(8)创建存储过程,要求:输入年度,计算每个业务员的年终奖金额。