Oracle SQL测试题
考试时间为2个小时
本着考察大家能力的原则,可以查API但不能交流,必须独立完成
姓名:____________ 一、选择题(不定向)
1、关于存储过程参数,正确的说法是( A)
A、可以通过begin procedure(name=>’Jack’,age=90);end;方式调用一个过程。 B、存储过程输入参数可以不输入信息而调用过程 C、过程中接收的参数必须要指定长度。 D、以上说法都不对
2、下列说法,正确的说法是( B )
A、只要在存储过程中有增删改语句,一定加自治事务 B、在函数内可以修改表数据 C、函数不能递归调用 D、以上说法都不对
3、有一product产品表(编号id,名称name,价格price,数量amt,所属分类type),下列语法不正确的是( D )
A、select * from product where price>1000
B、select sum(price) from product group by type having max(price)>1000 C、select type,sum(price) from product where price>1000 group by type
D、select type,sum(price) from product where max(price)>1000 group by type
4、关于触发器,下列说法正确的是( B )
A、可以在表上创建INSTEAD OF 触发器 B、表级触发器不能使用:OLD和:NEW C、行级触发器不能使用:OLD和:NEW D、触发器可以显式调用
5、下列那些是Oracle的伪列(D)
A、ROWID
B、ROW_NUMBER() D、ROWNUM E、COLUMN
6、当表中的数据经常用于查询,而很少被修改时,则应该建立( A )
A、索引 B、检查约束 C、主键 D、外键
7、在建表时如果希望某列的值,在一定的范围内,应建什么样的约束?( C)
A、primary key B、unique C、check D、not null
8、下列说法正确的是( D )
A、在PLSQL自定义函数中如果包含UPDATE、DELETE、INSERT语句,不必在函数体内给出COMMIT;
B、自定义函数可以在SQL语句中调用、也可以在PLSQL块中调用 C、自定义函数可以返回表类型
D、自定义函数中的参数可以是OUT类型
*9、在表exam中存在以下数据: id 01 02 03 msg Product is 85% that all. Rose’s bag is write. Tom grade then 50% in class 要求查询表msg列中包含%(百分号)的sql,正确的是:(B) A、 select * from car where color like '%\\%%'; B、 select * from car where instr(color,'%')>0; C、 select * from car where color like '%%%' ;
D、 select * from car where color like '%/%%' escape '/';
10、关于delete from someTable与truncate someTable都可以清空表中的数据,它们的说法正确的是:(A) A、delete from someTable将会默认开始一个事务,事务提交后,数据将被删除。 B、delete from someTable会引发表或行级的delete触发器。 C、truncate someTable默认开始一个事务,并等待用户提交后生效。 D、truncate someTable将会引发表或行级的insert触发器。 11、关于事务,说法正确的是:(B,D) A、当执行一个DDL语句时,事务就开始了。 B、当执行insert,update,delete语句时事务即开始了。 C、可以通过set autocommit on;修改事务的状态。 D、当执行rollback或是commit时事务即结束。 12、表A中有一行数据name=’Jack’,事务提交方式为Oracle数据库的默认状态。此时scott_A客户端对此行进行了update A set name=’Rose’ where name=’Jack’的操作。而后scott_B也对此行进行了update A set name=’Mary’ where name=’Jack’的操作。在scott_A还没有提交时,scott_B的状态为:(A,D) A、抛出异常。因为scott_A的事务还没有结束。 B、进入等待。因为scott_A的事务还没有结束。 C、修改成功,此时name的值为Mary。 D、修改失败且退出,name的值为Rose。
13、以下可以正确约束sex为’1’或’0’的DDL语句为:(A,B) A、 create table stud( sex char(1) constraint ck check(sex in('1','0'))
);
B、create table stud( sex char(1) constraint ck check(sex='1' or sex='0')
);
C、create table stud(
sex char(1) constraint ck check(sex='1' and sex='0') );
D、create table stud( sex char(1) constraint ck check(sex in('1','0')) not null
);
14、以下创建主键正确的方式的是:(A) A、create table t( Id int primary key );
B、create table t( Id int primary key, Cardid int primary key );
C、create table t( id int constraint t_pk primary key );
D、create table t( Id int not null, Cardid int not null, Constraint t_pk primary key(id,cardid) );
15、存在以下plsql块:
Declare v_time varchar(30); Begin //line 1 End; 在line 1处写入以下哪一行代码可以让程序运行通过:(C) A、select sysdate from dual; B、dbms_output.put_line(‘hello’); C、select sysdate into v_time from dual; D、execute immediate 'select sysdate v from dual' into v;
16、关于视图view和同义词synonym的说法正确的是:(A)
A、view可以来自于一个或是多个查询。而synonym只可以某个固定的对象如表。 B、view和synonym都可以指向其他用户的表。(有权限的情况下)。
C、都可以通过view或是synonym修改源对象。 D、都可以在上面创建触发器。 17、以下代码块:
set serveroutput on;
begin for vv in (select name from person) loop //line 1 end loop;
end
在person表中,存在一列name,则正确输出name值的方式是:A A、dbms_output.put_line(vv.name); B、dbms_output.put_line(vv); C、不能正确的输出,因为这个plsql块前面没有declare关键字 D、dbms_output.put_line(name);
18、存在以下过程,它接收一个in out参数类型:
create or replace procedure p1(arg1 in integer,arg2 in out varchar2) as begin
dbms_output.put_line(arg1||arg2); end;
以下是调用代码: set serveroutput on; declare
v_arg2 varchar2(30); begin
v_arg2:='Jack'; //line 1 end
在line 1处写入哪一行,可以正确的调用p1过程:(B) A、p1(90,’Jack’); B、p1(90,v_arg2);
C、p1(arg1=>90,arg2=>v_arg2); D、p1(arg2=>v_arg2,arg1=>90);
19、下列哪些方法可以调用无参数过程 out_time (A,C)
A、exec out_time B、run out_time C、begin out_time; end; D、out_time startup;
20、以下哪些是事务的特点:(ABCD) A、原子性。
B、一致性。 C、隔离性。 D、持久性。
二、编程题
1、存在表T(a,b,c,d), 要根据字段c排序后取第21-30条记录显示(含a,b,c,d字段),请给出实现的SQL。 begin Select * from T order by c;
Select * from T where rownum>=21 and rownum<=30; End;
2、查找出当前用户模式下,每张表的记录数,和字段的名称信息,以scott用户为例,结果应如下:
DEPT...................................4行 字段:DEPT_NAME,DEPT_NO EMP...................................14行 字段:EMP_NO,EMP_DEPT 请完成实例的plsql块。 Declare
Dept_num int; Emp_num int;
Sel_dept varchar2(20); Sel_emp varchar2(20); Begin
Select count(*) into dept_num from dept; Select count(*) into emp_num from emp;
select column_name into sel_dept from user_tab_columns where table_name='DEPT'; Select column_name into sel_emp from user_tab_columns where table_name = 'EMP'; Dbms_output.put_line('DEPT...................................'||dept_num||'行'); Dbms_output.put_line('emp...................................'||emp_num||'行'); Dbms_output.put_line('字段'||sel_dept); Dbms_output.put_line('字段'||sel_emp); when others then End;
3、存在以下列车信息: 动车:D402 到达时间 开车时间 济南西 德州东 沧州西 天津南 廊坊 北京南 动车:G20 上海虹桥 南京南 济南西 北京南 起点站 07:39 08:02 08:32 08:51 09:14 20:00 07:40 08:04 08:34 08:53 终到站 到达时间 起点站 17:07 19:21 20:55 开车时间 16:00 17:09 19:23 终到站
要求设计:
1:列车运行管理系统的表结构。 2:要求可以根据出发地、和目的地查询出列车号,包括始发车和路过的列车。 如:查询济南到北京的列车,即可以列出D402,和过路车G20。 3:要求画出E-R实体关系图。 4:要求写出实现的SQL代码。 5:要求可以扩展和添加新的列车和时刻信息。
Create table d402(motor_car_num varchar2(10) primary key,arrive_time varchar2(10),drive_time varchar2(10));
Select * from motor_car where depart_place = ‘济南’