oracle 第四章PLSQL习题及答案
Oracle PLSQL考试题
Oracle SQL & PL/SQL 测试题1.Oracle发出下列select语句:SQL> select e.empno, e.ename, d.loc2 from emp e, dept d3 where e.deptno = d.deptno4 and substr(e.ename, 1, 1) = ‘S’;下列哪个语句是Oracle数据库中可用的ANSI兼容等价语句?AA.select empno, ename, loc from emp join dept on emp.deptno = dept.deptno where substr(emp.ename, 1, 1) = ‘S’;B.select empno, ename, loc from emp, dept on emp.deptno = dept.deptno wheresubstr(emp.ename, 1, 1) = ‘S’;C.select empno, ename, loc from emp join dept where emp.deptno = dept.deptno and substr(emp.ename, 1, 1) = ‘S’;D.select empno, ename, loc from emp left join dept on emp.deptno = dept.deptno and substr(emp.ename, 1, 1) = ‘S’;2.你要对操纵Oracle数据库中的数据。
下列哪个选项表示Oracle中select语句的功能,并且不需要使用子查询?BA.可以用select语句改变Oracle中的数据 B.可以用select语句删除Oracle 中的数据C.可以用select语句和另一个表的内容生成一个表 D.可以用select语句对表截断3.Oracle数据库中发出一个查询。
PLSQL连接Oracle数据库问题及详解
PLSQL连接Oracle数据库问题及详解三、PLSQL安装或使⽤免安装版本。
四、PLSQL连接Oracle问题汇总: PLSQL Developer 连接 64位Oracle 数据库需要找到两个东东: 1、32位的 oci.dll ⽂件 因为PLSQL Developer 为32位软件,故在访问 Oracle 11g 64位数据库时,需⾸先经过32位的oci.dll这个中间⼈再与64位oracle 数据库通信。
故在PLSQL Developer访问 64位oracle 数据库时,必须要能能找到 32位的 oci.dll⽂件位置。
32位 oci.dll的获取有两种⽅式,⼀是再安装⼀个32位Oracle 11g 客户端;⼆是直接从⽹络下载⼀个包含32位 oci.dll 的简易安装包。
所以如果你安装64位的客户端,⽤plsql是连接不上数据库的。
就是说如果你安装的是64位Oracle,则如果⽤plsql必须安装⼀个32位的oracle客户端。
2、ORACLE_HOME ⽬录(即 Oracle主⽬录) 找 ORACLE_HOME 是为了找到 tnsnames.ora .tnsnames.ora存储数据库连接信息。
tnsnames.ora可通过”Net Configuration Assistant”配置,或直接从别的计算机上复制⼀个该⽂件放置到 Oracle客户端主⽬录\network\admin 中即可。
(client安装完成之后会在注册表中写⼊⾃⼰的ORACLE_HOME地址,所以plsql会根据此地址找到tnsnames.ora) ORACLE_HOME主⽬录可以在操作系统中的环境变量中配置(尽量不要采⽤此办法)。
解决⽅法多种多样,但要实现的⽬标也就上⾯两个。
五、环境变量配置:(正常安装情况下请不要主动配置操作系统的环境变量,后期安装client之后容易出问题,因为oracle和oracle client都会有⾃⼰的ORACLE_HOME环境变量,这些变量在注册表中是已经存在的,如果再在操作系统中添加系统环境变量,容易引起混乱,从⽽导致oracle 监听服务⽆法启动等问题)NLS_LANGAMERICAN_AMERICA.AL32UTF8或 SIMPLIFIED CHINESE_CHINA.ZHS16GBK六、PLSQL设置⼋、PLSQL连接相关问题 1、打开PLSQL,输⼊⽤户名密码连接报错:ORA-12638: Credential retrieval failed 解决办法:修改sqlnet.ora⽂件,将 SQLNET.AUTHENTICATION_SERVICES= (NTS) 改为SQLNET.AUTHENTICATION_SERVICES= (NONE) 如果出现不让保存的权限问题,请把sqlnet.ora⽂件拷贝到桌⾯,修改之后再把原来的⽂件删除,把桌⾯⽂件拷贝进去就⾏了。
Oracle---PL-SQL经典练习题
(完整word版)Oracle---PL-SQL经典练习题亲爱的读者:本文内容由我和我的同事精心收集整理后编辑发布到文库,发布之前我们对文中内容进行详细的校对,但难免会有错误的地方,如果有错误的地方请您评论区留言,我们予以纠正,如果本文档对您有帮助,请您下载收藏以便随时调用。
下面是本文详细内容。
最后最您生活愉快 ~O(∩_∩)O ~Oracle 作业题一.创建一个简单的PL/SQL程序块使用不同的程序块组件工作使用编程结构编写PL/SQL程序块处理PL/SQL程序块中的错误1.编写一个程序块,从emp表中显示名为“SMITH”的雇员的薪水和职位。
declarev_emp emp%rowtype;beginselect * into v_emp from emp where ename='SMITH';dbms_output.put_line('员工的工作是:'||v_emp.job||' ;他的薪水是:'||v_emp.sal);end;2.编写一个程序块,接受用户输入一个部门号,从dept表中显示该部门的名称与所在位置。
方法一:(传统方法)declarev_loc deptcp.dname%type;v_dname deptcp.dname%type;v_deptno deptcp.deptno%type;beginv_deptno :=&部门编号;select loc,dname into v_loc,v_dname from deptcp wheredeptno=v_deptno;dbms_output.put_line('员工所在地是:'||v_loc||';部门名称是:'||v_dname);exceptionwhen no_data_foundthen dbms_output.put_line('您输入的部门编号不存在,请从新输入,谢谢');end;方法二:(使用%rowtype)declarev_dept dept%rowtype;beginselect * into v_dept from dept where deptno=&部门号;dbms_output.put_line(v_dept.dname||'--'||v_dept.loc);end;3.编写一个程序块,利用%type属性,接受一个雇员号,从emp表中显示该雇员的整体薪水(即,薪水加佣金)。
oracle(4级一体化) 附答案
一体化考核模拟试卷《基本SQL操作》模块一、基础知识(每题2分,共50分)1.以下不是分组函数的为 D 。
A.MAX B.SUM C.A VG D.SQRT2.关于ORDERBY子句,下列说法中不正确的是D C 。
A.排序列可以用它们在SELECT子句中的次序号代替B.升序和降序的关键字是ASC和DESCC只能按一个列进行排序D.允许对多个列进行排序。
3.在UPDATE语句中.更改列值的关键字是 A 。
A.SET B,ON C ORDER BY D.WHERE4.事务处理 B 可以防止事务未完前其他用户更新数据。
A.提交B.锁 C.回滚D.备份5.下列 A B 约束对访问权限有要求·:A.UNIQUE B.FOREIGN KEYC.CHECK D.NOT NULL6.以下语句中不属于DDL的是 C B :A.CREATE B.DELETE C.ALTER D.DROP7.Oracle的体系结构是D 类型。
A.服务器 B.客户机 C B/S D.C/S8.搜索—列中的部分匹配的数据,下列关键字中最合适的是 C B 。
A.EXISTSB.LIKE C.BETWEEN D.IN9.下面WHERE子句实现了查找以“黄浦”开头的地址的是 D 。
A.LIKE黄浦...,B.LIKE'黄浦_' C.LIKE'黄浦*' D. LIKE'黄浦%'10.一般来说.—个学校会有很多班级,每个班级有很多学生,因此班级与学生之间可以构成D C 的关系·IA.一对一B.多对一C.一对多 D.多对多11.在关系数据库二,主键的性质是 C 。
A.创建唯一索引,允许空值B.在一个表中可以有多个主键C.为标识表中唯一的实体D.只允许以表中第一个字段建立22812A.V ARCHAR2 D.DATETIME shi SQL13.将多个查询结果返回一个结果集合的运算符是 C 。
PLSQL试题
PLSQL试题pl/sql试题I多项选择题(18分)1.oracle数据库中为新创建的表分配的初始空间通常有多大()a、 a块B.a区域c.a段D.a表空间2.关于存储过程参数,正确说法的是()a、存储过程的输出参数可以是标量类型或表类型。
B.存储过程的输入参数可以在没有输入信息的情况下调用该过程c.可以指定字符参数的字符长度,(函数的()或者过程的(number/varchar2))d.以上说法都不对3.下列说法正确的是()a、只要存储过程中有添加、删除和修改语句,就必须添加自治事务。
B.表格数据可以在函数中修改。
C.函数不能递归调用。
D.上述陈述是错误的4.关于触发器,下列说法正确的是()a、可以在表上创建Insteadof触发器。
B.和聚合触发器不能使用“:old”和“:new”C.行级触发器不能用于审核D.触发器可以显示调用5.下列哪些是oracle的伪列()(多选)a、罗伊德b.row_number()c.leveld.rownum6.当表中存在大量重复行数据时,应创建的索引类型应为()a.b树b.reversec.bitmapd.函数索引姓名:________二.填空题(10’)1.交易的特点是。
(4’)2.定义游标的过程包括:声明游标中将要使用的变量、声明游标、_____、_____、并关闭光标(2')3.子程序包括______和_______。
(2’)4.%type关键字作用是_________.(2’)三.编程题1.公司想根据员工的职位提高工资。
公司决定按照以下加薪结构进行处理:(22')designationclerksalesmananalystotherwise五百兆一千亿一千五百万二千编写一个程序块,接受一个雇员名,从emp表中实现上述加薪处理。
2.编写函数检查指定员工的工资是否在有效范围内。
不同职位的薪资范围为:(20')designationraiseclerk1500-25002501-35003501-4500销售人员分析其他4501andabove如果薪资在该范围内,将显示消息“SalarySok”,否则薪资将更新为该范围内的最小值。
OraclePLSQL习题
OraclePLSQL习题PL/SQL习题:1、下列哪行代码有错误?1) DECLARE2) v_name varchar2(40):=’David Clark’;3)v_id number(4):=1001;4)v_status BOOLEAN:=FALSE;5)BEGIN6)INSERT INTO EMP(id,name,status)7)values(v_id,v_name,v_status);8)END;A. 第2行B. 第3行C. 第4行D. 第7行2、判断些列语句,v_price的值是多少时,将给变量v_grade赋值为’C’?IF v_price>1000 ThenV_grade:='A';ElseIf v_price>900 thenV_grade:='B';ElseIf v_price>800 thenV_grade:='C';ElseIf v_price>600 thenV_grade:='D';ElseV_grade:='E';End if;End if;End if;A. v_price大于1000B. v_price大于800C. v_price在801和900之间D. v_price在601和800之间3、什么情况下将引起while循环中断?A. 当条件的值是NULL时B. 当条件的值是FALSE时C. 当条件的值是TRUE时D. 当执行到EXIT语句时4、一个IF…THEN…ELSEIF语句可以有多少个else子句?A. 0B. 1C. 没有限制D. 645、考虑下列PL/SQL块时,有多少行被加入到numbers中?BEGINFOR IX IN 5..10LOOPIF IX=6 THENINSERT INTO NUMBERS VALUES(IX);ELSEIF IX=7 THENDELETE FROM NUMBERS;END IF;IF IX=7 THENROLLBACK;COMMIT;END IF;END IF;END LOOP;COMMIT;END;A. 6B. 1C. 5D. 06、假如C1是PL/SQL块中的定义游标,在游标打开之后,取第一条记录之前,C1%NOTFOUND的值是什么?A. TRUEB. FALSEC. NULLD. 都不是7、当下列PL/SQL块执行时,V1的值是什么?DECLAREV0 PLS_INTEGER;V1 BOOLEAN;BEGINBEGINSELECT COUNT(*) INTO V0 FROM EMP;END;BEGINV1:=SQL%FOUND;END;END;A. NULLB. TRUEC. FALSED. 代码清单8、下列代码中哪一行有错误?1)DECLARE2)CURSOR C_EMP IS SELECT EMPNO,SAL FROM EMP;3)R_EMP C_EMP%ROWTYPE;4)BEGIN5)OPEN C_EMP;6)LOOP7)FETCH C_EMP INTO R_EMP;8)EXIT WHEN C_EMP%NOTFOUND;9)UPDATE EMP SET SAL=SAL+50010)WHERE EMPNO=C_EMP.EMPNO;11)END LOOP;12)CLOSE C_EMP;13)END;A. 第2行B. 第3行C. 第7行D. 第8行E. 第10行9、下列PL/SQL执行后将显示什么?DECLAREX VARCHAR2(10):=’TITLE’;Y VARCHAR2(10):=’TITLE’;BEGINIF X>=Y THENDBMS_OUTPUT.PUT_LINE(‘X is greater’);End if;IF Y>=X THENDBMS_OUTPUT.PUT_LINE(‘Y is greater’);End if;END;A. X is greaterB. Y is greaterC. X is greater 和Y is greaterD. 两者都不是10、下列PL/SQL块的哪一行将引起一个错误?1) DECLARE2) CURSOR eCUR(en_IN number) IS3) SELECT * FROM emp WHERE empno=en_in;4) emp_info ecur%ROWTYPE;5) BEGIN6) OPEN ecur(7965);7) FETCH eCUR INTO emp_info;8) END;A. 第2行B. 第3行C. 第4行D. 没有引起错误11、在下列PL/SQL块的第3行将引发一个错误,该错误将在哪儿处理?1)BEGIN2) DECLARE TIMESTAMP DATE:='SYSDATE';3) BEGIN4) DBMS_output.put_line('sw'); --CALL_SOME_PROC;5) EXCEPTION6) WHEN VALUE_ERROR THEN7) DBMS_OUTPUT.PUT_LINE('VALUE ERROR');8) WHEN OTHERS THEN9) DBMS_OUTPUT.PUT_LINE('SOME OTHER ERROR');10) END;11)EXCEPTION12) WHEN OTHERS THEN13) D BMS_OUTPUT.PUT_LINE('unknown ERROR');14)15)END;A. 第7行B. 第9行C. 第13行D. 第9、13行12、什么类型的异常需要一条RAISE语句A. 一个命名的异常B. 一个用户定义异常C. 一个非命名的异常D. 在处理异常时从不需要RAISE语句13、下列PL/SQL代码做了什么工作?INVALID_DATE EXCEPTION;A. 定义一个异常B. 引发一个异常C. 联系一个异常D. 处理一个异常(异常信息:SQLCODE< 如:ORA-1422>、SQLERRM)14、哪些类型的异常不能在出错处理部分进行处理?A. 语法错误B. 数据库错误C. 数据类型不匹配错误D. 被零除错误15、在下列游标定义中错误是什么?CURSOR C1(PEMPNO IN NUMBER(4)) ISSELECT EMPNO,ENAME FROM EMPWHERE EMPNO=PEMPNO;A. 缺少INTO语句B. 在游标定义中,变量名前面需要加”:”C. 游标定义中不能指定inD. 在游标定义中不能指定数据类型的长度16、EMP表有下列数据empno ename salary comm deptno7369 SMITH 800 207499 ALLEN 1600 300 307521 WARD 1250 500 307566 JONES 2975 207654MARTIN 1250 1400 30下列PL/SQL块执行后,V_EMPNO的值是什么?(EMPNO是EMP 表的主键) SET SERVEROUTPUT ONDECLAREV_EMPNO EMP.EMPNO%TYPE:=800;CURSOR C_EMPNO(P_EMPNO EMP.EMPNO%TYPE:=7369) IS SELECT EMPNO FROM EMP WHERE EMPNO=P_EMPNO;BEGINOPEN C_EMPNO(null);FETCH C_EMPNO INTO V_EMPNO;CLOSE C_EMPNO;dbms_output.put_line(v_empno);END;A. 7369B. 800C. NULLD. 017、参看上题的emp数据,当下列块执行时,V_A的值是什么?DECLAREV_A NUMBER;V_E NUMBER;CURSOR C1 IS SELECT EMPNO FROM EMP;BEGINOPEN C1;LOOPFETCH C1 INTO V_E;V_A:=C1%ROWCOUNT;EXIT WHEN C1%NOTFOUND;END LOOP;CLOSE C1;END;A. 5B. 6C. 4D. 018、参看上题的emp数据,当下列块执行时,V_COUNT的值是什么?DECLAREV_COUNT NUMBER;R_EMP EMP%ROWTYPE;BEGINSELECT * INTO R_EMP FROM EMP WHERE EMPNO<7700;V_COUNT:=SQL%ROWCOUNT;END;A. 块内有错,执行将失败B. 4C. 5D. 019、参看上面的emp数据,当下列块执行时,将输出什么?Set serveroutput onDECLAREV_ENAME EMP.ENAME%TYPE;BEGINSELECT ENAME INTO V_ENAME FROM EMP WHERE EMPNO=9999;IF SQL%NOTFOUND THENDBMS_OUTPUT.PUT_LINE(‘NO SUCH EMPLOYEE NUMBER’);ELSEDBMS_OUTPUT.PUT_LINE(V_ENAME);END IF;EXCEPTIONWHEN NO_DATA_FOUND THENDBMS_OUTPUT.PUT_LINE(‘INVALID EMPLOYEE NUMBER’);END;A. 块执行时将返回一个错误B. NO SUCH EMPLOYEE NUMBERC. NO NAMED. INVALID EMPLOYEE NUMBER20、考虑下列执行块,当块执行并且没有记录被删除时,V_COUNT的值是什么?DECLAREV_COUNT NUMBER;BEGINDELETE FROM EMP WHERE EMPNO<0;V_COUNT:=SQL%ROWCOUNT;END;A. NULLB. TRUEC. 0D. FALSE21、在一个PL/SQL块中,执行任何语句之前SQL%NOTFOUND 的值是什么?A. NOTFOUNDB. TRUEC. NULLD. FALSE22、在一个块中不允许出现哪些命令?A. TRUNCATEB. DELETEC. SAVEPOINTD. ALTER TABLE23、考虑下列SELECT语句,假如没有满足where条件的行,将发生什么?Select count(*) into v_count from emp where sal<10;A. 引起一个NO_DATA_FOUND错误B. SELECT 将成功地执行C. 引起一个TOO_MANY_ROWS错误D. COUNT(*)在PL/SQL块内使用是无效的24、考虑下列PL/SQL块,选择最合适的答案。
第4-6章习题答案oracle
第4-6章习题答案oracle一、在客户表customers中提取以下数据1、输出客户全名(First_name+last_name)具有最多英文字母数的客户资料select * from customerswhere length(first_name||last_name)=(select max(length(first_name||last_name))from customers);2、输出所有客户的资料,如果生日为空,则用1970年1月1日代替,如果电话为空,则用0代替。
select customer_id,first_name,last_name,nvl(dob,to_date('19700101','yyyymmdd')),nvl(phone,'0')from customers;3、查询First_name中第2个字母是元音字母(aeiou)的客户全名select first_name||' '||last_namefrom customerswhere lower(substr(first_name,2,1)) in ('a','e','i','o','u');4、输出所有1970年6月1日之前出生的客户资料,其中生日(dob)的输出形式改成“xxxx 年xx月xx日”select customer_id,first_name,last_name,to_char(dob,'yyyy')||'年'||to_char(dob,'mm')||'月'||to_char(dob,'dd')||'日',phonefrom customerswhere dob<to_date('19700601','yyyymmdd');< bdsfid="124" p=""></to_date('19700601','yyyymmdd');<>5、统计年龄大于17000天的客户数量select count(*)from customerswhere sysdate-dob>17000;6、统计年龄大于45岁的客户数量select count(*)from customerswhere months_between(sysdate,dob)/12>45;7、输出客户名字、客户生日以及客户生日所在月份有多少天select first_name||' '||last_name,dob,to_char(last_day(dob),'dd') from customers;8、提取客户名字、客户生日所在的月份select first_name||' '||last_name,to_number(to_char(dob,'mm'))from customers;二、在商品表products中提取以下数据1、有几种不同的商品类型(product_type_id)?(不统计商品类型为空的商品)select count(distinct product_type_id)from productswhere product_type_id is not null;2、商品描述信息(description)里带music的商品数量select count(*)from productswhere description like'%music%';select count(*)from productswhere instr(description,'music')>0;3、查询描述信息(description)里带alien的商品价格总和。
oracle sql 试题及答案
oracle sql 试题及答案在Oracle数据库管理和开发中,SQL(Structured Query Language)是一种标准化的关系型数据库语言。
在这篇文章中,我们将提供一些Oracle SQL试题及其答案,旨在帮助读者巩固和加深对Oracle SQL语言的理解。
请注意,答案中不再重复题目,仅给出相应的解答。
1. 以下SQL语句中,哪一个用于创建一个名为"Employees"的表?CREATE TABLE Employees (EmployeeID INT PRIMARY KEY,LastName VARCHAR2(50),FirstName VARCHAR2(50),DateOfBirth DATE);2. 在一个名为"Employees"的表中,你想要删除LastName为"Smith"的所有行。
你应该使用以下哪个SQL语句?DELETE FROM Employees WHERE LastName = 'Smith';3. 假设你有一个名为"Employees"的表,你想要增加一个名为"Salary"的列,数据类型为NUMBER(10,2)。
你应该使用以下哪个SQL 语句?ALTER TABLE Employees ADD (Salary NUMBER(10,2));4. 以下SQL查询语句将返回哪些列?SELECT LastName, FirstName FROM Employees;答案:该查询将返回"Employees"表中的LastName和FirstName列。
5. 以下SQL语句将返回"Employees"表中有多少条记录?SELECT COUNT(*) FROM Employees;答案:该查询将返回"Employees"表中的记录数。
oracle的sql语句的练习题及答案(员工表+部门表)
oracle的sql语句的练习题及答案(员⼯表+部门表)⼀、创建表及初始化数据1、表说明:emp员⼯表(empno员⼯号/ename员⼯姓名/job⼯作/mgr上级编号/hiredate受雇⽇期/sal薪⾦/comm佣⾦/deptno部门编号) dept部门表(deptno部门编号/dname部门名称/loc地点)注意:⼯资 = 薪⾦ + 佣⾦2、创建表create table DEPT(DEPTNO NUMBER(2) not null,DNAME VARCHAR2(14),LOC VARCHAR2(13));alter table DEPT add constraint PK_DEPT primary key (DEPTNO);create table EMP(EMPNO NUMBER(4) not null,ENAME VARCHAR2(10),JOB VARCHAR2(9),MGR NUMBER(4),HIREDATE DATE,SAL NUMBER(7,2),COMM NUMBER(7,2),DEPTNO NUMBER(2));alter table EMP add constraint PK_EMP primary key (EMPNO);3、初始化数据insert into DEPT (DEPTNO, DNAME, LOC)values (10, 'ACCOUNTING', 'NEW YORK');insert into DEPT (DEPTNO, DNAME, LOC)values (20, 'RESEARCH', 'DALLAS');insert into DEPT (DEPTNO, DNAME, LOC)values (30, 'SALES', 'CHICAGO');insert into DEPT (DEPTNO, DNAME, LOC)values (40, 'OPERATIONS', 'BOSTON');commit;insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7369, 'SMITH', 'CLERK', 7902, to_date('17-12-1980', 'dd-mm-yyyy'), 800, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7499, 'ALLEN', 'SALESMAN', 7698, to_date('20-02-1981', 'dd-mm-yyyy'), 1600, 300, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7521, 'WARD', 'SALESMAN', 7698, to_date('22-02-1981', 'dd-mm-yyyy'), 1250, 500, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7566, 'JONES', 'MANAGER', 7839, to_date('02-04-1981', 'dd-mm-yyyy'), 2975, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7654, 'MARTIN', 'SALESMAN', 7698, to_date('28-09-1981', 'dd-mm-yyyy'), 1250, 1400, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7698, 'BLAKE', 'MANAGER', 7839, to_date('01-05-1981', 'dd-mm-yyyy'), 2850, null, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7782, 'CLARK', 'MANAGER', 7839, to_date('09-06-1981', 'dd-mm-yyyy'), 2450, null, 10);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7788, 'SCOTT', 'ANALYST', 7566, to_date('19-04-1987', 'dd-mm-yyyy'), 3000, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7839, 'KING', 'PRESIDENT', null, to_date('17-11-1981', 'dd-mm-yyyy'), 5000, null, 10);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7844, 'TURNER', 'SALESMAN', 7698, to_date('08-09-1981', 'dd-mm-yyyy'), 1500, 0, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7876, 'ADAMS', 'CLERK', 7788, to_date('23-05-1987', 'dd-mm-yyyy'), 1100, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7900, 'JAMES', 'CLERK', 7698, to_date('03-12-1981', 'dd-mm-yyyy'), 950, null, 30);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7902, 'FORD', 'ANALYST', 7566, to_date('03-12-1981', 'dd-mm-yyyy'), 3000, null, 20);insert into EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO)values (7934, 'MILLER', 'CLERK', 7782, to_date('23-01-1982', 'dd-mm-yyyy'), 1300, null, 10);commit;⼆、题⽬练习1.列出⾄少有⼀个员⼯的所有部门。
oracle数据库sql试题及答案
oracle数据库sql试题及答案Oracle数据库SQL试题及答案1. 如何查询员工表中所有员工的姓名和工资,要求工资从高到低排序?```sqlSELECT name, salaryFROM employeesORDER BY salary DESC;```2. 如何统计每个部门的员工人数?```sqlSELECT department_id, COUNT(*) AS employee_countFROM employeesGROUP BY department_id;```3. 如何查询工资高于平均值的员工信息?```sqlSELECT *FROM employeesWHERE salary > (SELECT AVG(salary) FROM employees);```4. 如何找出没有直属上司的员工?```sqlSELECT *FROM employees e1WHERE NOT EXISTS (SELECT 1FROM employees e2WHERE e1.manager_id = e2.employee_id);```5. 如何查询工资在3000到5000之间的员工姓名和工资?```sqlSELECT name, salaryFROM employeesWHERE salary BETWEEN 3000 AND 5000;```6. 如何删除员工表中所有工资低于3000的员工记录?```sqlDELETE FROM employeesWHERE salary < 3000;```7. 如何更新员工表中所有部门为10的员工的工资,增加10%?```sqlUPDATE employeesSET salary = salary * 1.1WHERE department_id = 10;```8. 如何查询员工表中每个员工的姓名和他们直属上司的姓名?```sqlSELECT AS employee_name, AS manager_name FROM employees e1JOIN employees e2 ON e1.manager_id = e2.employee_id; ```9. 如何查询员工表中每个部门的平均工资?```sqlSELECT department_id, AVG(salary) AS avg_salary FROM employeesGROUP BY department_id;```10. 如何查询员工表中工资最高的员工信息?```sqlSELECT *FROM employeesWHERE salary = (SELECT MAX(salary) FROM employees); ```。
Oracle-SQL-练习题及答案
Oracle-SQL-练习题及答案本文由NiCoBee贡献Oracle SQL 练习题注:这些查询题目涵盖了各种查询的技术,请大家认真做,做好了的查询语句之后,有兴趣的同学可以再创建相应的视图和存储过程create table wkj_student(sno varchar2(10) primary key,sname varchar2(20),sage number(2),ssex varchar2(5));create table wkj_teacher(tno varchar2(10) primary key,tname varchar2(20));create table wkj_course(cno varchar2(10),cname varchar2(20),tno varchar2(20),constraint pk_course primary key (cno,tno));create table wkj_sc(sno varchar2(10),cno varchar2(10),score number(4,2),constraint pk_sc primary key (sno,cno));/*******初始化学生表的数据******/insert into student values ('s001','张三',23,'男');insert into student values ('s002','李四',23,'男');insert into student values ('s003','吴鹏',25,'男');insert into student values ('s004','琴沁',20,'女');insert into student values ('s005','王丽',20,'女');insert into student values ('s006','李波',21,'男');insert into student values ('s007','刘玉',21,'男');insert into student values ('s008','萧蓉',21,'女');insert into student values ('s009','陈萧晓',23,'女');insert into student values ('s010','陈美',22,'女'); commit;/******************初始化教师表***********************/ insert into teacher values ('t001', '刘阳');insert into teacher values ('t002', '谌燕');insert into teacher values ('t003', '胡明星');commit;/***************初始化课程表****************************/ insert into course values ('c001','J2SE','t002');insert into course values ('c002','Java Web','t002');insert into course values ('c003','SSH','t001');insert into course values ('c004','Oracle','t001');insert into course values ('c005','SQL SERVER 2005','t003'); insert into course values ('c006','C#','t003');insert into course values ('c007','JavaScript','t002');insert into course values ('c008','DIV+CSS','t001');insert into course values ('c009','PHP','t003');insert into course values ('c010','EJB3.0','t002'); commit;/***************初始化成绩表***********************/ insert into sc values ('s001','c001',78.9);insert into sc values ('s002','c001',80.9);insert into sc values ('s003','c001',81.9);insert into sc values ('s004','c001',60.9);insert into sc values ('s001','c002',82.9);insert into sc values ('s002','c002',72.9);insert into sc values ('s003','c002',81.9);insert into sc values ('s001','c003','59');insert into sc values ('s002','c003','58');commit;练习:注意:以下练习中的数据是根据初始化到数据库中的数据来写的SQL 语句,请大家务必注意。
plsql面试题及答案
plsql面试题及答案PL/SQL面试题及答案1. 什么是PL/SQL?PL/SQL是一种过程化编程语言,旨在与Oracle数据库一起使用。
它是在标准SQL语言的基础上扩展而来的,具有更多的编程功能和控制结构。
PL/SQL可以用于编写存储过程、触发器、函数和包等数据库对象。
2. PL/SQL的优势是什么?PL/SQL具有以下几个优势:- 高性能:PL/SQL代码在数据库服务器上直接执行,减少了与数据库之间的通信开销,提高了性能。
- 数据库交互:PL/SQL可以与数据库进行高效交互,支持丰富的SQL语句和事务处理。
- 强大的编程功能:PL/SQL具有条件语句、循环语句、异常处理、游标等功能,使开发人员可以实现更复杂的业务逻辑。
- 结构化编程:PL/SQL支持模块化开发,可以将代码组织成存储过程、函数和包等可重复使用的单元。
- 安全性:PL/SQL提供了一系列的安全特性,包括访问控制、数据封装和异常处理等,确保数据的安全性和完整性。
3. PL/SQL中的控制结构有哪些?PL/SQL提供了以下控制结构:- 条件语句:IF-THEN、IF-THEN-ELSE、IF-THEN-ELSIF。
- 循环语句:LOOP、WHILE、FOR。
- 异常处理:EXCEPTION。
- CASE语句:CASE-WHEN-THEN。
- GOTO语句:用于跳转到指定的标签或代码块。
- NULL语句:用于忽略某些情况下的代码执行。
4. 如何定义变量和常量?在PL/SQL中,可以使用DECLARE语句定义变量和常量。
定义变量时需要指定变量的名称和数据类型,可以选择性地指定初始值。
例如:```sqlDECLAREemp_name VARCHAR2(100) := 'John Doe';emp_salary NUMBER := 5000;pi NUMBER := 3.14;max_attempts CONSTANT NUMBER := 3;```5. 如何使用游标?游标用于在PL/SQL中处理查询结果集。
Oracle PLSQL课参考答案
第一章PL/SQL概述1.3变量声明1、a正确,其余错误2、BEGINDBMS_OUTPUT.PUT_LINE('my first pl/sql block'); END;3、declarev_ename emp.ename%type := 'SCOTT';v_sal emp.sal%type;beginSELECT sal into v_salFROM empWhere ename=v_ename;DBMS_OUTPUT.PUT_LINE('雇员薪水='||v_sal); END;4、variable v_ename varchar2BEGINSELECT ename into :v_enameFROM empWhere empno=&emp_num;END;5、DECLAREmaxDepNo integer;BEGINSELECT MAX(deptno)INTO maxDepNoFROM dept ;dbms_output.put_line(maxDepNo);END;1.5与Oracle的交互1、create table test as select * from emp where 1=2; 2、DECLAREv_sal emp.sal%type;BEGINselect max(sal) into v_sal from emp;insert into test select * from emp where sal=v_sal;END;3、set serveroutput onDECLAREv_sal emp.sal%type;BEGINselect avg(sal) into v_sal from emp;update test set sal=v_sal;dbms_output.put_line(v_sal);END;第二章:编写控制结构2.1条件分支语句1、declarev_empno emp.empno%type := &p_empno;v_sal emp.sal%type;v_var varchar2(20);beginselect sal into v_sal from emp where empno = v_empno;if v_sal<2000 thenv_var := '挣的不多,需努力';elsif v_sal between 2000 and 5000 thenv_var := '收入还可以,还需努力';elsev_var := '挣的挺多了,歇歇吧';end if;dbms_output.put_line(v_sal|| v_var);end;2.2循环语句1、create table message(results varchar2(10));beginfor i in 1..10 loopif i=6 or i=8 thennull;elseinsert into message values(i);end if;end loop;commit;end;beginfor i in 1..10 loopif i<>6 and i<>8 theninsert into message values(i);end if;end loop;commit;end;第三章:复合数据类型3.1复合数据类型第四章:编写游标4.2游标的处理1、declarev_sal emp.sal%type;v_ename emp.ename%type;cursor emp_cursor isselect ename,sal from emp;beginopen emp_cursor;loopfetch emp_cursor into v_ename,v_sal;if(v_sal >3000) thendbms_output.put_line(v_ename||' '||v_sal);exit;end if;end loop;close emp_cursor;end;4.5带参数的游标1、declare--v_ename emp.ename%type;cursor emp_cursor(s_sal number,e_sal number) is select ename from empwhere sal between s_sal and e_sal;beginFOR emp_record IN emp_cursor(0,2000) LOOPdbms_output.put_line('薪水低于2000的用户是:'||emp_record.ename);end loop;dbms_output.put_line('===================================');FOR emp_record IN emp_cursor(2000,4000) LOOPdbms_output.put_line('薪水大于2000,低于4000的用户是:'||emp_record.ename);end loop;dbms_output.put_line('===================================');FOR emp_record IN emp_cursor(4000,1000000) LOOPdbms_output.put_line('薪水大于4000的用户是:'||emp_record.ename);end loop;end;declarev_ename emp.ename%type;cursor emp_cursor(s_sal number,e_sal number) isselect ename from empwhere sal between s_sal and e_sal;beginopen emp_cursor(0,2000);loopfetch emp_cursor into v_ename;exit when emp_cursor%notfound;dbms_output.put_line('薪水低于2000的用户是:'||v_ename);end loop;if emp_cursor%isopen thenclose emp_cursor;end if;open emp_cursor(2000,4000);loopfetch emp_cursor into v_ename;exit when emp_cursor%notfound;dbms_output.put_line('薪水大于2000,低于4000的用户是:'||v_ename);end loop;if emp_cursor%isopen thenclose emp_cursor;end if;open emp_cursor(4000,1000000);loopfetch emp_cursor into v_ename;exit when emp_cursor%notfound;dbms_output.put_line('薪水大于4000的用户是:'||v_ename);end loop;if emp_cursor%isopen thenclose emp_cursor;end if;end;第五章:异常处理1、create table message(result varchar2(100));2、declarev_sal emp.sal%type;v_ename emp.ename%type;v_num number;e_none_sal exception;e_many_sal exception;pragma exception_init(e_none_sal,-20202);v_var varchar2(100);beginv_sal:=&p_sal;select count(sal) into v_numfrom empwhere sal=v_sal;if v_num=1 thenselect ename into v_enamefrom empwhere sal=v_sal;dbms_output.put_line(v_ename||' '||v_sal);elsif v_num=0 thenRaise_Application_Error(-20202,'没有雇员挣'||v_sal||'的薪水');elsif v_num>1 thenraise e_many_sal;end if;exceptionwhen e_none_sal thenv_var := sqlerrm;dbms_output.put_line(v_var );insert into messagevalues(v_var);when e_many_sal thendbms_output.put_line('太多雇员挣sal的薪水'); insert into messagevalues('太多雇员挣sal的薪水');end;3、DECLAREv_empno emp.empno%TYPE := 7369;yearlog INT;BEGINSELECT trunc(months_between(SYSDATE,hiredate)/12)INTO yearlogFROM empWHERE empno = v_empno;dbms_output.put_line(yearlog);EXCEPTIONWHEN NO_DATA_FOUND THENdbms_output.put_line('此员工号不存在');END;4.DECLAREv_name emp.ename%TYPE;v_job emp.job%TYPE;BEGINSELECT e2.ename,e2.jobINTO v_name,v_jobFROM emp e1,emp e2WHERE e1.mgr = e2.empnoAND e1.mgr IS NULL;EXCEPTIONWHEN NO_DATA_FOUND THENdbms_output.put_line('没有最高管理者');WHEN TOO_MANY_ROWS THENdbms_output.put_line('最高管理者人员过多');END;5.declareCURSOR m_cursorISSELECT deptno,AVG(sal) AS avgsalFROM empGROUP BY deptno;e_tohig EXCEPTION;PRAGMA exception_init(e_tohig,-20001);beginFOR r_cur IN m_cursor LOOPIF r_cur.avgsal >= 15000 THENRaise_Application_Error(-20001,'该部门的平均工资过高'); END IF;END LOOP;EXCEPTIONWHEN e_tohig THENRaise_Application_Error(-20001,'该部门的平均工资过高'); end;第六章:创建存储过程6.2存储过程处理6.2.1过程的参数1、Create or replace procedure sal_proc(p_sal in emp.sal%type,p_mes out varchar2)isv_sal emp.sal%type;beginselect avg(sal) into v_sal from emp;if v_sal < p_sal thenp_mes := '薪水太高了' ;elsep_mes := '薪水正常' ;end if;end;2、Create or replace procedure testisp_mes varchar2(20);beginsal_proc(4000,p_mes);dbms_output.put_line(p_mes);end;6.2.2传递参数的方法1、Create or replace procedure raise_sal(p_deptno in emp.deptno%type default 20,p_hiredate in date default to_date('2006-01-01','yyyy-mm-dd'), p_sal in emp.sal%type,p_count out number)isbeginupdate empset sal = sal + p_salwhere deptno = p_deptno and hiredate<p_hiredate;p_count := SQL%rowcount;end raise_sal;2、Create or replace procedure testisv_sal emp.sal%type;v_count number(10);beginv_sal := 200;raise_sal(30,to_date(‘1999-01-01’,‘yyyy-mm-dd’),v_sal,v_count ); --按照位置方式传递值--raise_sal(p_sal=>v_sal,p_count=>v_count); --按照指定方式传递值--raise_sal(30,p_count=>v_count,p_sal=>v_sal); --按照组合方式传递值dbms_output.put_line(v_count);end;第七章:创建函数7.2函数处理1、create or replace function func(v_empno in emp.empno%type)return varchar2isv_ename emp.ename%type;beginselect ename into v_enamefrom empwhere empno= v_empno;return v_ename;end;VARIABLE g_ename varchar2EXEC :g_ename := func(7369)Print g_ename2、create or replace function func(v_deptno in emp.deptno%type)return numberisv_sal emp.sal%type;beginselect max(sal) into v_salfrom empwhere deptno = v_deptno;return v_sal;end;create or replace procedure sal_procisv_sal emp.sal%type;e_many_sal EXCEPTION;v_message varchar2(20);cursor emp_cursor isselect deptno,dname from dept;beginfor emp_record in emp_cursor loopv_sal := func(emp_record.deptno);if v_sal > 4000 thenv_message := emp_record.dname;raise e_many_sal;end if;end loop;exceptionwhen e_many_sal thendbms_output.put_line(v_message||'部门的薪水太高了'); end;第八章:创建包8.1包的基础1、create table test(empno number(2) constraint emp_pk primary key, ename varchar2(10),sal number(7,2));2、create or replace package test_pakisPROCEDURE add_user(p_empno in number,p_ename in varchar2,p_sal in number);PROCEDURE del_user(p_empno in number);function add_sal(p_empno in number,p_sal in number)return number;end test_pak;3、create or replace package body test_pakisPROCEDURE add_user(p_empno in number,p_ename in varchar2,p_sal in number)isbegininsert into testvalues(p_empno,p_ename,p_sal);commit;end add_user;PROCEDURE del_user(p_empno in number)isbegindelete from test where empno=p_empno;commit;end del_user;function add_sal(p_empno in number,p_sal in number)return numberisv_sal number(10);beginupdate testset sal=sal+p_salwhere empno=p_empno;commit;select sal into v_salfrom testwhere empno=p_empno;return v_sal;end add_sal;end test_pak;4、exec test_pak.add_user(1,'ljs',1000);declarev_sal number(7,2);beginv_sal:=test_pak.add_sal(1,500);dbms_output.put_line(v_sal);end;exec test_pak.del_user(1);第九章:触发器9.2DML触发器9.2.1DML语句触发器1、CREATE OR REPLACE PROCEDURE secure_dmlISBEGINIF (TO_CHAR(SYSDATE, 'DY') in ('星期六','星期日')) or(TO_CHAR (SYSDATE, 'HH24:MI') NOT BETWEEN '08:45' AND '17:30') THEN RAISE_APPLICATION_ERROR (-20205, '你只能在正常的办公时间改变数据');END IF;END secure_dml;1)、CREATE OR REPLACE TRIGGER secure_prod BEFORE INSERT OR UPDATE OR DELETE ON deptBEGINsecure_dml;END secure_prod;2)、INSERT INTO dept VALUES (50,’dep50’,’shenyang’);9.2.2DML行触发器1、Create table tmp_table(Empno number(4),Ename varchar2(10),Sal_old number(7,2),Sal_new number(7,2),Job varchar2(10));2、Create or replace trigger sal_empafter update on empfor each rowBeginif(:new.sal <:old.sal) theninsert into tmp_table values(:old.empno,:old.ename,:old.sal,:new.sal,:old.job);end if;End;update emp set sal=2000;。
OraclePLSQL测试题与答案(绝对经典)
Oracle PL/SQL测试题姓名:___ _________ 一、选择题1、Oracle数据库中为新创建的表分配的初始空间通常为多大(B)A、一个块、一个块B、一个区、一个区C、一个段、一个段D、c一个表空间一个表空间2、关于存储过程参数,正确的说法是(B)A、存储过程的输出参数可以是标量类型,也可以是表类型、存储过程的输出参数可以是标量类型,也可以是表类型B、存储过程输入参数可以不输入信息而调用过程、存储过程输入参数可以不输入信息而调用过程C、可以指定字符参数的字符长度(函数的()或者过程的(number/varchar2))D、以上说法都不对、以上说法都不对3、下列说法,正确的说法是(B)A、只要在存储过程中有增删改语句,一定加自治事务、只要在存储过程中有增删改语句,一定加自治事务B、在函数内可以修改表数据、在函数内可以修改表数据C、函数不能递归调用、函数不能递归调用D、以上说法都不对、以上说法都不对4、有一产品表(编号,名称,价格,数量,所属分类),下列语法不正确的是(D)A、select * from 产品表产品表 where价格>1000 产品表B、select sum(价格所属分类 having max(价格价格)>1000 产品表 group by 所属分类价格) from 产品表C、select所属分类,sum(价格) from 产品表所属分类产品表 where 价格>1000 group by 所属分类D、select所属分类,sum(价格) from 产品表所属分类产品表 where max(价格)>1000 group by 所属分类5、关于触发器,下列说法正确的是(B)A、可以在表上创建INSTEAD OF 触发器触发器B、语句级触发器不能使用“:old”和“:new”C、行级触发器不能用于审计功能、行级触发器不能用于审计功能D、触发器可以显式调用、触发器可以显式调用6、下列那些是Oracle的伪列(ACD)A、ROWID B、ROW_NUMBER() C、LEVEL D、ROWNUM E、COLUMN 7、当表的重复行数据很多时,应该创建的索引类型应该是(、当表的重复行数据很多时,应该创建的索引类型应该是( C )A、B树B 、reverse C 、bitmap D 、函数索引、函数索引8、在建表时如果希望某列的值,在一定的范围内,应建什么样的约束?(C )A 、primary key B 、unique C 、check D 、not null 9、利用游标来修改数据时,所用的。
SQL第四章课后习题答案
USE studentGOCREATE TABLE stud_info( stud_id CHAR(10) NOT NULL,name NVARCHAR(4) NOT NULL,birthday DATETIME,gender NCHAR(1),address NVARCHAR(20),telcode CHAR(12),zipcode CHAR(6),mark DECIMAL(3,0))--1、利用资源管理器创建表--2.、删除表和创建表use studentgodrop table stud_infogouse studentgodrop table classroom_infogouse studentgodrop table dept_codegouse studentgodrop table lesson_infogouse studentgodrop table specialty_codegouse studentgodrop table staffroom_infogouse studentgodrop table stud_gradegouse studentgodrop table teacher_infogouse studentgodrop table teacher_schedulegoUSE studentGOCREATE TABLE stud_info( stud_id CHAR(10) NOT NULL,name NVARCHAR(4) NOT NULL,birthday DATETIME,gender NCHAR(1),address NVARCHAR(20),telcode CHAR(12),zipcode CHAR(6),mark DECIMAL(3,0))USE studentGOCREATE TABLE teacher_info( teacher_id CHAR(10) NOT NULL,name NVARCHAR(4) NOT NULL,gender NCHAR(1),age int,tech_title nchar(5),telephone varchar(12),salary decimal(7),course_id char(10))gocreate table stud_grade(stud_id char(10) not null,name nvarchar(4) not null, course_id char(10),grade numeric(4))use studentgocreate table lesson_info(course_id char(10) not null, course_name nvarchar(12) not null, course_type nchar(2) not null, course_mark int not null,course_time decimal(3))use studentgocreate table teach_schedule (course_id char(10) not null, course_date datetime,course_week int,room_id char(6),deptcode char(2),teacher_id char(6))use studentgocreate table dept_code (deptcode char(2) not null, deptname nvarchar(10),)use studentgocreate table specialty_code (speccode char(10) not null, specname nvarchar(10))gocreate table staffroom_info(jysh_id char(4) not null,jysh_name nvarchar(10),jysh_type nchar(2),jysh_leader nvarchar(4))use studentgocreate table classroom_info(room_id char(6) not null,room_name nvarchar(8),room_type nvarchar(6),room_device nvarchar(10),room_size int)use studentgocreate table stud_exam(exam_course nvarchar(10),exam_type nvarchar(6),exam_quantity int,exam_time datetime,exam_id char(10),exam_teacher nvarchar(10),exam_classroom nvarchar(8),exam_rule nvarchar(10),exam_jilu nvarchar(20))--3、分别使用对象资源管理器和T—SQL语句修改表结构--(1)、将teacher_info表中的teacher_id列长度从6个字符改变到8个字符alter table teacher_infoalter column teacher_id char(8)--(2)、在dept_code表中加最后一列dept_memo,其数据类型为可变长度字符型,30位alter table dept_codeadd dept_memo nvarchar(30)--(3)、向stud_info表中增加“入学时间”列,其数据类型为日期型alter table stud_infoadd schooldate datetime--假设在创建数据表lesson_info时错将课程学分course_mark设计为char(2),现欲修改为alter table lesson_infoalter column course_mark decimal(3,1)--(4).建立约束--(4)1、为student数据库的stud_info表中的mark列建立check约束alter table stud_infoadd constraint ch_mark check(mark between 560 and 600);--(4).2、使用T-SQL语句创建表stud_info,设置stud_info为primary key约束use studentgodrop table stud_infogoUSE studentGOCREATE TABLE stud_info( stud_id CHAR(10) NOT NULL constraint pk_stud_id primary key,name NVARCHAR(4) NOT NULL,birthday DATETIME,gender NCHAR(1),address NVARCHAR(20),telcode CHAR(12),zipcode CHAR(6),mark DECIMAL(3,0))--(4).3为表stud_info的telcode列建立UNIQUE约束alter table stud_infoadd constraint un_telephone unique (telcode)--(4).4为stud_grade表中的stud_id列建立foreign key约束alter table stud_gradeadd constraint fk_stud_id foreign key(stud_info) references stud_info(stud_id)--独立实践:alter table stud_infoadd default(null) for zipcode--(5).插入数据--(5).1insert into stud_infovalues('0401010811',N'张源','12-05-1986',N'男',N'北京市海淀区','010-********','100080',560) select * from stud_info--独立实践:USE studentGOINSERT INTO "STUD_INFO" ("STUD_ID","NAME","BIRTHDAY","GENDER", "ADDRESS","TELCODE","ZIPCODE","MARK")VALUES ('0401010811',N'张源','12-05-1986',N'男',N'北京市海淀区','010-********','100080',560);INSERT INTO "STUD_INFO" ("STUD_ID","NAME","BIRTHDAY","GENDER", "ADDRESS","TELCODE","ZIPCODE","MARK")VALUES ('0401020201',N'赵明','08-06-1986',N'男',N'上海市浦东区','021-********','201700',560);INSERT INTO "STUD_INFO" ("STUD_ID" ,"NAME" ,"BIRTHDAY" ,"GENDER" , "ADDRESS" ,"TELCODE" ,"ZIPCODE" ,"MARK")VALUES ('0401030101',N'王刚','01-02-1986',N'男',N'天津市南开区','022-********','300000',560);INSERT INTO "STUD_INFO" ("STUD_ID" ,"NAME" ,"BIRTHDAY" ,"GENDER" , "ADDRESS" ,"TELCODE" ,"ZIPCODE" ,"MARK")VALUES ('0401050201',N'陈红','10-25-1986',N'女',N'武汉市汉口区','027-********','430000',560);INSERT INTO "STUD_INFO" ("STUD_ID" ,"NAME" ,"BIRTHDAY" ,"GENDER" , "ADDRESS" ,"TELCODE" ,"ZIPCODE" ,"MARK")VALUES ('0401040112',N'孙强','06-07-1986',N'男',N'重庆市沙坪坝','023-********','400000',560);INSERT INTO "STUD_INFO" ("STUD_ID" ,"NAME" ,"BIRTHDAY" ,"GENDER" , "ADDRESS" ,"TELCODE" ,"ZIPCODE" ,"MARK")VALUES ('0401020103',N'李伟','09-01-1986',N'男',N'北京市大兴县','010-********','102600',560);INSERT INTO "STUD_INFO" ("STUD_ID" ,"NAME" ,"BIRTHDAY" ,"GENDER" , "ADDRESS" ,"TELCODE" ,"ZIPCODE" ,"MARK")VALUES ('0401010634',N'钱昆','12-06-1986',N'男',N'广州市海珠区','020-********','510000',560);INSERT INTO "STUD_INFO" ("STUD_ID" ,"NAME" ,"BIRTHDAY" ,"GENDER" , "ADDRESS" ,"TELCODE" ,"ZIPCODE" ,"MARK")VALUES ('0401030213',N'郑芳','08-09-1986',N'女',N'江苏省南京市','025-********','210000',560);INSERT INTO "STUD_INFO" ("STUD_ID" ,"NAME" ,"BIRTHDAY" ,"GENDER" , "ADDRESS" ,"TELCODE" ,"ZIPCODE" ,"MARK")VALUES ('0401010102',N'袁飞','03-11-1986',N'男',N'湖南省长沙县','0731-*******','410000',560);INSERT INTO "STUD_INFO" ("STUD_ID" ,"NAME" ,"BIRTHDAY" ,"GENDER" , "ADDRESS" ,"TELCODE" ,"ZIPCODE" ,"MARK")VALUES ('0401040123',N'孔荣','05-31-1986',N'男',N'云南省昆明市','0871-*******','650000',600);--(5).2insert into teacher_infovalues('010101',N'刘娜',N'女',34,N'讲师','020-********',418,'0401010102')select * from teacher_info--独立实践:USE studentGOinsert into teacher_infovalues('010102',N'邵云鹏',N'男',45,N'教授','020-********',418,'0401010105');insert into teacher_infovalues('010103',N'孙乐多',N'男',27,N'助教','020-********',418,'0401010106');insert into teacher_infovalues('010104',N'赵一欧',N'女',26,N'助教','020-********',418,'0401010101');insert into teacher_infovalues('010106',N'王吉林',N'男',32,N'讲师','020-********',418,'0401010103');insert into teacher_infovalues('010105',N'王小悦',N'女',35,N'讲师','020-********',418,'0401010104');--(5).3USE studentGOINSERT INTO classroom_info VALUES('120703',N'微机组装与维护',N'实训',N'微机、投影仪',40); INSERT INTO classroom_info VALUES('120704',N'计算机网络',N'实验',N'交换机、路由器等',40); INSERT INTO classroom_info VALUES('120705',N'数据库',N'计算机机房',N'微机、投影仪',60); INSERT INTO classroom_info VALUES('120706',N'软件设计',N'计算机机房',N'微机、投影仪',60); INSERT INTO classroom_info VALUES('120707',N'多媒体',N'计算机机房',N'微机、投影仪',60); INSERT INTO classroom_info VALUES('120708',N'',N'普通',N'白板、投影仪',120);USE studentGOINSERT INTO dept_code VALUES ('01',N'计算机工程系');INSERT INTO dept_code VALUES ('02',N'管理工程系');INSERT INTO dept_code VALUES ('03',N'机电工程系');INSERT INTO dept_code VALUES ('04',N'食品工程系');INSERT INTO dept_code VALUES ('05',N'轻化工程系');INSERT INTO dept_code VALUES ('06',N'通信工程系');INSERT INTO dept_code VALUES ('07',N'外语工程系');USE studentGOINSERT INTO lesson_info VALUES('0401010101',N'计算机导论',N'考查',30,1.5);INSERT INTO lesson_info VALUES('0401010102',N'Java程序设计',N'考试',60,3.5);INSERT INTO lesson_info VALUES('0401010103',N'微型计算机原理',N'考试',60,3.5); INSERT INTO lesson_info VALUES('0401010104',N'IT市场营销',N'考查',30,1.5);INSERT INTO lesson_info VALUES('0401010105',N'网络互联设备与配置',N'考查',60,2.0); INSERT INTO lesson_info VALUES('0401010106',N'多媒体技术',N'考查',60,3.0);USE studentGOINSERT INTO specialty_code VALUES ('040101',N'计算机应用技术');INSERT INTO specialty_code VALUES ('040102',N'计算机网络技术');INSERT INTO specialty_code VALUES ('040103',N'计算机控制技术');INSERT INTO specialty_code VALUES ('040104',N'多媒体技术');INSERT INTO specialty_code VALUES ('040105',N'计算机软件技术');INSERT INTO specialty_code VALUES ('040106',N'计算机通信技术');INSERT INTO specialty_code VALUES ('040107',N'计算机管理技术');USE studentGOINSERT INTO staffroom_info VALUES ('0101',N'计算机应用',N'专业',N'王二毛');INSERT INTO staffroom_info VALUES ('0102',N'计算机网络',N'专业',N'李四冲');INSERT INTO staffroom_info VALUES ('0103',N'计算机软件',N'专业',N'赵一生');INSERT INTO staffroom_info VALUES ('0104',N'计算机管理',N'专业',N'汪三洋');USE studentGOINSERT INTO stud_grade VALUES('0401010811',N'张源','0401010102',90);INSERT INTO stud_grade VALUES('0401020201',N'赵明','0401010105',89);INSERT INTO stud_grade VALUES('0401030101',N'王刚','0401010103',87);INSERT INTO stud_grade VALUES('0401050201',N'陈红','0401010101',91);INSERT INTO stud_grade VALUES('0401040112',N'孙强','0401010104',83);INSERT INTO stud_grade VALUES('0401020103',N'李伟','0401010106',86);INSERT INTO stud_grade VALUES('0401010634',N'钱昆','0401010106',78);INSERT INTO stud_grade VALUES('0401030213',N'郑芳','0401010106',95);INSERT INTO stud_grade VALUES('0401010102',N'袁飞','0401010106',95);INSERT INTO stud_grade VALUES('0401040123',N'孔荣','0401010106',83);INSERT INTO stud_grade VALUES('0401050127',N'张军','0401010106',84);USE studentGOINSERT INTO teach_schedule VALUES('0401010101','08-30-2004','15','120703','01','010104'); INSERT INTO teach_schedule VALUES('0401010102','08-30-2004','15','120704','01','010101'); INSERT INTO teach_schedule VALUES('0401010103','08-30-2004','13','120705','01','010106'); INSERT INTO teach_schedule VALUES('0401010104','08-30-2004','10','120706','01','010105'); INSERT INTO teach_schedule VALUES('0401010105','08-30-2004','19','120707','01','010102'); INSERT INTO teach_schedule VALUES('0401010106','08-30-2004','14','120708','01','010103');--(6).修改数据--(6).1update stud_grade set grade=grade+grade*0.1 where course_id='0401010101'--(6).2update stud_grade set grade=null where grade<60--(6).3update teacher_info set age=age+1--独立实践:update stud_grade set grade=83 where stud_id='0401020201'--(7).修改数据--(7).1delete from stud_info where stud_id='0401020201'--(7).2delete from dept_code where deptcode='01'--独立实践:delete from teacher_info--本章习题--1.简答题--1(1).表是对数据进行存储和操作的一种逻辑结构,每一个表代表一个对象。
数据库plsql考试题
数据库试题(共50分)填空(每空1分,共5分)1、SQL是处理关系数据库的标准语言,用于事务回滚的语句是,用于事务提交的语句是。
2、查询语句中,关键字可从SELECT 语句的结果中除去重复的行,子句可指定结果集的排序,有ASC、DESC两种排序顺序,关键字可以指定结果集分组。
不定项选择题(每空2分,必需全部选正确,共32 分)1、请看下面的查询语句SELECT * FROM tables WHERE name LIKE '%LOG'执行该语句可以:( )A、从表tables中查找name为"%LOG"的记录B、从表tables中查找name中最前面三个字符是"LOG"的所有记录C、从表tables中查找name中最后面三个字符是"LOG"的所有记录D、从表tables中查找name为LIKE '%LOG'的记录2、请看下面的删除语句:DELETE employee_id, salary, job_idFROM employeesWHERE dept_id = 90;请问这个删除语句为什么会执行失败?( )A、EMPLOYEES表中没有dept_id为90的记录B、不能在删除语句的DELETE后面指定列名C、不能删除JOB_ID列,因为它是一个非空列D、不能删除EMPLOYEE_ID列,因为它是主键3、请看下面的查询语句:SELECT LAST_NAME, SALARY, DEPARTMENT_IDFROM EMPWHERE DEPARTMENT_ID = NULL;这个查询语句需要查出所有没有指派部门的职员,请问以下哪个说法是正确的?( )A、查询语句可以显示需要的结果B、查询语句中,WHERE子句的列名需要修改为LAST_NAMEC、查询语句中,WHERE子句中的操作符需要修改为ISD、查询语句中,WHERE子句中需要修改为使用外连接4、请看下面的触发器语句:CREATE OR REPLACE TRIGGER update_empAFTER UPDATE ON empBEGININSERT INTO audit_table (who, audited)VALUES(USER, SYSDATE);END;你执行了一个emp表的update操作,这个update操作修改了十条记录。
plsql练习题及答案
plsql练习题及答案标题:PL/SQL练习题及答案PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库中的一种编程语言,用于编写存储过程、触发器和函数等数据库对象。
在学习和掌握PL/SQL的过程中,进行一些练习题是非常有帮助的。
本文将为大家提供一些PL/SQL练习题及其答案,帮助读者加深对PL/SQL的理解和应用。
1. 编写一个PL/SQL程序,创建一个名为"employees"的表,包含以下字段:员工编号(emp_id),员工姓名(emp_name),员工职位(emp_position),员工工资(emp_salary)。
然后插入几条员工记录,并查询该表的所有数据。
答案:```sql-- 创建employees表CREATE TABLE employees (emp_id NUMBER,emp_name VARCHAR2(50),emp_position VARCHAR2(50),emp_salary NUMBER);-- 插入员工记录INSERT INTO employees VALUES (1, 'John', 'Manager', 5000);INSERT INTO employees VALUES (2, 'Jane', 'Developer', 4000);INSERT INTO employees VALUES (3, 'Mike', 'Analyst', 3500);-- 查询表的所有数据SELECT * FROM employees;```2. 编写一个PL/SQL程序,创建一个名为"get_employee_salary"的存储过程,该存储过程接收一个员工编号作为输入参数,并返回该员工的工资。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题四
一、选择题
1.关于PL/SQL程序设计语言的优点,说法不正确的是()
A.PL/SQL是结构化查询语言,与SQL语言没有区别
B.PL/SQL是集过程化功能和查询功能为一体的语言
C.PL/SQL程序设计语言可以进行错误处理
D.PL/SQL程序设计语言可以定义变量,使用控制结构
2.关于在PL/SQL程序设计中使用输出语句,说法不正确的是()
A.使用输出语句之前,需要激活系统包DBMS_OUTPUT
B.输出语句为DBMS_OUTPUT系统包中的PUT_LINE函数
C.激活输出包的语法为SET serveroutput ON
D.PL/SQL中行注释用符号"//"
3.下列选项中,()是PL/SQL块的必选项。
A.DECLARE
C. EXCEPTION
D. SELECT
B.BEGIN
4.在PL/SQL块中不能直接嵌人(
A. SELECT
B.INSERT
C. CREATE TABLE
MIT
5.下列变量定义方法不正确的是()。
A.al VARCHAR2(10);a2 al%TYPE;
B. a3 student.sno%TYPE;
C. a4 student%ROWTYPE;
D.b2 bl%TYPE;b1 VARCHAR2(10);
6.下列记录类型的变量有()个分变量。
CURSOR s 1 IS SELECT sno, sname, age FROM student;
v_c s_18 ROWTYPE;
A.1
B.2
C.3
D.4
7.在PL/SQL中,非法的标识符是()
A. table $123
B.123 table
C.table123
D.Table_123
8.判断IF语句∶
IF v_num<5THEN v_example:= 1;
ELSIF v_num<10 THEN v_example:= 2;
ELSIF v_num>20 THEN v_example:= 3;
ELSIF v_num>35 THEN v_example:=4;
ELSE v_example:=5;
END IF
如果v_num是37,值()将被赋值给v_example
A.1
B.2
C.3
D.4
9.判断IF语句∶
IF a>10 THEN b:=0;
ELSE IF a>5 THEN b:= 1;
ELSE THEN b:= 2;
END;
上述语句中有()处错误。
A.0
B.1
C.2
D.3
10.判断CASE语句∶
CASE a
WHEN'A'THEN a:='M';
WHEN'A'THEN a:='N';
WHEN'B'THEN a:='P';
WHEN'B'THEN a:='Q';
END CASE;
如果变量a的初始值是B,那么执行CASE语句之后a的值是()。
A.M
B.N
C. P
D.Q
11.判断简单循环语句∶
DeCLARE
suml NUMBER:=0;
i NUOMBER:=1;
BEGIN
loop
suml:= sum1 + i;i++;
exit when i>10;
EXD;
dbms_output.put_line('1~10之间的整数和是∶',suml); END;
上述语句中有()处错误。
A.0
B.1
C.2
D.D.3
12.执行以下语句∶
DBECLARE
n NUMBER:=1;suml NUMBER:=0;BBGIN
WHILE n<=10 LOOP
sum1:= sum1+n;n:=n+1;END L00P;
dbms_output.put_line(sum1);
END;
执行完成后输出的结果是()。
A.0
B.11
C.55
D.死循环
13.执行以下语句∶DECLARE
iNUMBER;BEGIN
FORiIN5..4 LOOP
dbms_output.put_line('');END LOOP;END;3
执行完成后循环次数为()
A.0次
B.2次
C.4次
D.5次
二、应用题
1.IF条件语句实现。
通过键盘输人某个学生的学号和课程号,查询该学生选课表中的成绩,判断成绩的等级并输出.
若成绩>90分,输出"成绩为∶优秀";若成绩>80分,输出"成绩为∶良好";
若成绩>70分,输出"成绩为∶中等";若成绩>60分,输出"成绩为∶及格";
若成绩<60分,输出"成绩为∶不及格"。
2.计算1~100的偶数和。
输出"1~~100的偶数和为∶?"。
要求分别用简单LOOP循环、WHLE循环和FOR循环实现。
第1章PL/SQL概述
一、选择题
1.A
2.D
3.B
4.C
5.D
6.C
7.B
8.C
9.D 10.C 11.D 12.C 13.A
二、上机实验题
1.1. IF条件语句实现
通过键盘输入某个学生的学号和课程号,查询该学生选课表中的成绩,判断成绩的等级并输出。
若成绩>90分,输出“成绩为:优秀”;
若成绩>80分,输出“成绩为:良好”;
若成绩>70分,输出“成绩为:中等”;
若成绩>60分,输出“成绩为:及格”;
若成绩<60分,输出“成绩为:不及格”;
答:
declare
v_sno sc.sno%type:=&a;//通过键盘输入
v_cno o%type:=&b; //通过键盘输入
v_grade sc.grade%type;
begin
select grade into v_grade
from sc
where sno=v_sno and cno=v_cno;
dbms_output.put_line('成绩为:'||v_grade);
if v_grade>90 then dbms_output.put_line('成绩为:优秀');
elsif v_grade>80 then dbms_output.put_line('成绩为:良好'); elsif v_grade>70 then dbms_output.put_line('成绩为:中等'); elsif v_grade>60 then dbms_output.put_line('成绩为:及格'); else dbms_output.put_line('成绩为:不及格');
end if;
end;
2. 计算1-100的偶数和。
输出“1-100的偶数和为:?”
要求分别用简单loop循环、while循环和for循环实现
答:
简单loop循环:
declare
v_sum NUMBER:=0;
v_num number:=1;
begin
loop
if mod(v_num,2)=0
then v_sum:=v_sum+v_num;
end if;
v_num:=v_num+1;
if v_num>100 then
exit;
end if;
end loop;
dbms_output.put_line('1-100的偶数和为:'||v_sum);
end;
while循环:
declare
v_sum NUMBER:=0;
v_num number:=1;
begin
while v_num<=100
loop
if mod(v_num,2)=0
then v_sum:=v_sum+v_num;
end if;
v_num:=v_num+1;
end loop;
dbms_output.put_line('1-100的偶数和为:'||v_sum); end;
for循环:
declare
v_sum NUMBER:=0;
begin
for i in 1..100
loop
if mod(i,2)=0
then v_sum:=v_sum+i;
end if;
end loop;
dbms_output.put_line('1-100的偶数和为:'||v_sum); end;。