一、选择题
1、 Oracle存储结构正确的是()
A. tablespace--segment--osblock--block
B. tablespace--segment--extent--block
C. tablespace-- extent -- segment--block
D. tablespace-- extent -- block -- segment
2、 表EMPLOYEES结构为
(
EMPLOYEE_ID NUMBER(6) not null primary key,
FIRST_NAME VARCHAR2(20) unique,
LAST_NAME VARCHAR2(25),
EMAIL VARCHAR2(25) not null,
PHONE_NUMBER VARCHAR2(20),
HIRE_DATE DATE,
JOB_ID VARCHAR2(10),
SALARY NUMBER(8,2),
COMMISSION_PCT NUMBER(2,2),
MANAGER_ID NUMBER(6),
DEPARTMENT_ID NUMBER(4)
)
以下哪几个语句可算出表中记录,多选 ()
A.select count(*) from EMPLOYEES
B.select count(EMPLOYEE_ID) from employees
C.select count(FIRST_NAME) from employees
D.select count(EMAIL) from employees
E.select count(JOB_ID) from employees
3、 表EMPLOYEES的结构为:
(
EMP_ID NUMBER(4) NOT NULL
LAST_NAME VARCHAR2(30) NOT NULL
FIRST_NAME VARCHAR2(30)
DEPT_ID NUMBER(2)
JOB_CAT VARCHAR2(30)
SALARY NUMBER(8,2)
)
下面哪条语句可以查出各个dept_id的最大salary值和最小salary值
并且它的最值小于5000最大值大于15000?()
A. SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
WHERE MIN(salary) < 5000 AND MAX(salary) > 15000;
B. SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
WHERE MIN(salary) < 5000 AND MAX(salary) > 15000
GROUP BY dept_id;
C. SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
HAVING MIN(salary) < 5000 AND MAX(salary) > 15000;
D. SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
GROUP BY dept_id
HAVING MIN(salary) < 5000 AND MAX(salary) > 15000;
E. SELECT dept_id, MIN(salary), MAX(salary)
FROM employees
GROUP BY dept_id, salary
HAVING MIN(salary) < 5000 AND MAX(salary) > 15000;
4、 SQL Server中在A数据库下如何访问B数据库中的C表:()
A.在A数据库中通过建立数据库链接指向B,然后直接访问select * from c
B.在B数据库中授权给A,然后直接访问select * from c
C.直接访问select * from c
D.直接访问select * from B..c
5、 Oracle数据库中用户A的一个存储过程用到用户B下的表Tab_B及函数Fun_B,正确的赋权语句是( )
A.在A用户模式执行 grant select on Tab_B to A; grant execute on Fun_B to A;
B.在B用户模式执行 grant select on Tab_B to A; grant execute on Fun_B to A;
C.在A用户模式执行 grant select on Tab_B to B; grant execute on Fun_B to B;
D.在B用户模式执行 grant select on Tab_B to B; grant execute on Fun_B to B;
6、 以下数据库是Oracle语法的是:()
A.select sysdate into v_time from dual;
B.select v_time = sysdate;
C.set v_time:=sysdate;(v_time为已定义的时间类型变量)
D. v_time=sysdate
7、 分别用 1.Insert, 2.delete, 3.update处理1000条数据,对数据库资源(回滚段)使用率由高到低的顺序是().
A.123
B.132
C.231
D.312
8、 请看以下oracle中存储过程
begin
begin
<语句1>
exception
when others then
dbms_output.put_line('错误1');
end;
begin
<语句2>
dbms_output.putline('错误2');
end;
exception
when others then
dbms_output.put_line("错误3");
end;
请问,当<语句1>,<语句2>出错时,该存储过程输出字符串分别是什么?( )
A.错误1,错误3
B.错误1,错误2
C.错误1,错误2,错误3
D.错误2,错误3
9、 SQL Server数据库中获取系统时间的内部函数是:()
A.sysdate
B.getdate()
C.currentdate
D.date()
10.在Oracle数据库中,请描述语句SELECT decode(sign(-1),1,'a','b') FROM dual返回结果:()
A.1
B.-1
C.a
D.b
二、简答题
1、 Oracle数据库中,如何增加表空间userdata的大小,请写出具体数据库语句?(以windows操作系统为例说明)
2、 简要叙述TRUNCATE, DROP, DELETE之间的关系。
3、举例说明while..loop/for..loop循环语句,如插入1..10的值到一个单字段数据表(结构自定义)。
4、解释data block , extent 和 segment的区别(这里建议用英文术语)
5、已知表T1中A字段含有重复的数据(A字段非空),请在空白处完成SQL语句,其中第一条语句查询T1标准的记录总数,第二条语句查询T1标准A字段不重复记录总数
三、编程题(10个空格,每个空格2分):
1、 作家信息表Auths包含两个字段
Author_Code |
VARCHAR2(50) |
Salary |
NUMBER(10) |
其中Author_Code为作家代码,主键。Salary为作家工资额,非空。
现由于工资调整,对于作家代码在'A00001'和'A00006';之间的作家工资少于或等于五百,则给该作家增加15%的工资,对于大于500到1000之间则增加12%,其它则增加10%。如下程序是通过游标方式实现的,请填写程序中相应的空格。
DECLARE
-- 声明两个变量,用来接收游标返回的工资和作家代码
v_Salary ()
v_Code ()
v_ErrText VARHCAR(200);
-- 声明游标c_Salary,该游标的结果集是Auths表中作家代码(Author_Code)值是
-- 'A00001'到'A00006'的工资值(Salary)和作家代码值(Author_Code)
CURSOR c_Salary IS
SELECT Salary,
Author_Code
FROM Auths
WHERE Author_Code >='A00001'
AND Author_Code <='A00006';
BEGIN
-- 打开游标
LOOP
--游标循环,将游标查询结果集中的一行保存到两个临时变量中
() c_Salary INTO v_Salary, v_Code;
-- 当结果集中没有行是退出
EXIT WHEN ();
-- 如果该作家的工作少于或等于五百,则给该作家增加15%的工资
-- 500到1000之间则增加12%,其他增加10%
IF v_Salary <= 500 THEN
UPDATE Auths
SET Salary = ()
WHERE Author_Code = v_Code;
ELSIF v_Salary <= 1000 THEN
UPDATE Auths
SET Salary = Salary + Salary * 0.12
WHERE Author_Code = v_Code;
()
UPDATE Auths
SET Salary = Salary + Salary * 0.1
WHERE Author_Code = v_Code;
END IF;
END LOOP;
();
();
EXCEPTION
WHEN OTHERS THEN
CLOSE c_Salary;
ROLLBACK;
v_ErrText := ();
DBMS_OUTPUT.PUT_LINE('程序异常终止,出现一下错误:'||v_ErrText);
END;