1、存储过程和函数的区别。
(1)、存储过程是作为PL/SQL语句执行,而函数是作为表达式的一部分调用;
(2)、存储过程在规格说明中不包含return语句,而在函数的规格说明这包含return子句;
(3)、存储过程不返回值,而函数必须返回值;
(4)、在存储过程中可以包含return语句,但不返回任何值,他只表示退出存储过程,而函数中必须包含一个return语句;
2、触发器分为事前触发和事后触发,这两种触发有何区别。语句级触发和行级触发有何区别。
事前触发是在数据没有写入数据库时就触发,而事后触发是在把数据写入数据库后再触发
语句级触发值所有的相同的语句只触发一次,而行级触发是每执行一条语句就触发一次。
3、根据students表(stuID,stuName,stuSex,stuAge,stuTel)编写一个存储过程,将students表中的学生ID号传递给这一过程,并向调用应用程序返回学生的姓名和电话号码。再编写一个具有过程调用的匿名块。
存储过程
create or replace procedure pro_stu(id in number,stuname out varchar2,
stutel out varchar2) as
begin
select A.stuname,A.stutel into stuname,stutel from students A
where A.stuid=id;
end pro_stu;
匿名块:
declare
stuid number(3);
stuname varchar2(12);
stutel varchar2(15);
begin
stuid:=&stuid;
pro_stu(stuid,stuname,stutel);
DBMS_OUTPUT.PUT_LINE('姓名:' || stuname);
DBMS_OUTPUT.PUT_LINE('电话:' || stutel);
EXCEPTION
when NO_DATA_FOUND then
DBMS_OUTPUT.PUT_LINE('未找到符合条件的数据!!');
end;
4、在显示游标上可以执行哪些操作?举例说明每一种语句的作用。
*声明游标
*打开游标
*提取游标
*关闭游标
5、集合运算符INTERSECT的用途是什么?
可以用来查询两个查询结果中相同的部分
6、找出与John Smith在相同的部门工作的雇员信息。
select A.* from employee A where deptid =(
select B.deptid from employee B where B.fname='john' and B.lname='smith') and
A.fname<>'john' and A.lname<>'smith'
7、通过一个外部连接,显示雇员名和部门信息。
select A.fname||'--'||A.lname as 雇员名,B.* from employee A,dept B
where A.deptid(+)=B.deptid;
8、抽取Employee表中按FNAME的字母顺序的第2条记录开始的3条记录的SQL语句。
select A.lname from (select rownum as rn, B.* from employee B order by
B.fname) A where rn>=2 and rn<5
9、INSERT ALL和INSERT FIRST语句的用途是什么?
Insert all 是向所以符合条件的表中插入数据;
Insert first 当有多个符合条件的时只向第一个中插入数据
10、使用多层子查询显示FINANCE部门的雇员的亲属信息。
select A.* from Dependent A where A.employeeid in(
select B.employeeid from employee B where B.deptid in(
select C.deptid from dept C where C.detpname='Finance'))
11、编写一个PL/SQL 程序,包括两个变量,分别用于姓和名,显示完整的姓名,姓和名之间用逗号和空格分隔开。
declare
familyname employee.fname%type;
name employee.lname%type;
cursor cur_emp is
select A.fname,A.lname from employee A where 1 = 1;
begin
open cur_emp;
fetch cur_emp into familyname,name;
while cur_emp%FOUND
loop
DBMS_OUTPUT.PUT_LINE('员工的姓名为:'||familyname||', '||name);
fetch cur_emp into familyname,name;
end loop;
end;
12、使用for循环,以相反的顺序显示10~1。
declare
begin
for num in reverse 1 .. 10
loop
DBMS_OUTPUT.PUT_LINE(num);
end loop;
end;
13、编写一个PL/SQL块,要求用户输入第一个数字、第二个数字和算术运算符(+、-、*、/)。如果运算符无效,则抛出并处理一个用户定义的异常。如果第二个数字是零,而且运算符是/,则处理ZERO_DIVIDE预定义的服务器异常。
declare
fnum number(4);
snum number(4);
oper varchar2(4);
result number(6);
nooper EXCEPTION;
begin
fnum:=&fnum;
snum:=&snum;
oper:='&oper';
result:=
case
when '+' then fnum+snum;
when '_' then fnum-snum;
when '*' then fnum*snum;
when '/' then fnum/snum;
else raise nooper;
DBSM_OUTPUT.PUT_LINE(fnum || oper|| snum||'='||result);
EXCEPTION
when nooper then
DBSM_OUTPUT.PUT_LINE('你输入了非法操作符!!');
when
ZERO_DIVIDE then
DBMS_OUTPUT.PUT_LINE('除数不能为零!!');
end;
14、表结构以及数据如下:
CREATE TABLE 表
(ID int, 日期 varchar2(11), 单据 char(3))
INSERT INTO 表 (ID , 日期 , 单据 ) VALUES ( 1 , '2004-08-02' , '001' );
INSERT INTO 表 (ID , 日期 , 单据 ) VALUES ( 2 , '2004-09-02' , '001' );
INSERT INTO 表 (ID , 日期 , 单据 ) VALUES ( 3 , '2004-10-02' , '002' );
INSERT INTO 表 (ID , 日期 , 单据 ) VALUES ( 4 , '2004-09-02' , '002' );
要求:设计一个查询,返回结果如下:
ID 日期 单据
---------- ----------- ---
1 2004-08-02 001
4 2004-09-02 002
即对于每个单据号,返回日期最小的行。
15、表内容:
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负
如果要生成下列结果, 该如何写sql语句?
胜 负
2005-05-09 2 2
2005-05-10 1 2
Sql脚本:
------------------------------------------
create table #tmp(rq varchar2(10),shengfu char(2))
insert into tmp values('2005-05-09','胜')
insert into tmp values('2005-05-09','胜')
insert into tmp values('2005-05-09','负')
insert into tmp values('2005-05-09','负')
insert into tmp values('2005-05-10','胜')
insert into tmp values('2005-05-10','负')
insert into tmp values('2005-05-10','负')
select A.rq,A.负,B.胜 from (select rq, count(*) as 负 from tmp where shengfu='负' group by rq) A
join
(select rq, Count(*) as 胜 from tmp where shengfu='胜' group by rq) B
on
A.rq=B.rq
分享到:
相关推荐
oracle ORACLE 基础资料 基础知识 培训资料oracle ORACLE 基础资料 基础知识 培训资料oracle ORACLE 基础资料 基础知识 培训资料oracle ORACLE 基础资料 基础知识 培训资料
oracle基础教程 课程说明 1 课程介绍 1 课程目标 1 相关资料 1 第1章 ORACLE数据库概述 2 1.1 产品概述 2 1.1.1 产品简介 2 1.1.2 基本概念 3 1.2 ORACLE系统结构 4 1.2.2 ORACLE物理结构 4 1.2.3 系统全局区 6 ...
《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle 12c数据库基础教程》教学课件—03Oracle数据库管理工具.pdf《Oracle...
以下将基于这些信息,详细阐述Oracle数据库的基础知识。 ### Oracle Database 11g 概述 #### 一、Oracle Database 简介 Oracle Database 是一款由美国Oracle公司开发的关系型数据库管理系统(RDBMS)。它提供了...
2. 选择安装位置和 Oracle_HOME 目录。 3. 配置 Oracle 网络监听器和数据库实例。 4. 创建数据库和 sys、system 用户。 5. 配置数据库参数和安全设置。 Oracle 数据库概念 Oracle 数据库是一种关系型数据库管理...
对于初学者来说,掌握Oracle基础知识是进入数据库领域的第一步。本文将深入浅出地介绍Oracle数据库的一些核心概念和基本操作,帮助你快速入门。 一、Oracle数据库系统概述 Oracle数据库是由美国Oracle公司开发的,...
以下是对Oracle基础知识的详细解析: **1. Oracle数据库概述** Oracle数据库是一个关系型数据库管理系统(RDBMS),它以数据表的形式存储和管理数据,每个表由列定义,数据以行的形式存储。Oracle 8i及以上版本还...
Oracle基础教程.pdf
通过本Oracle基础教程PPT,你将逐步了解并掌握这些概念,为你的Oracle学习之路打下坚实基础。随着对Oracle的理解加深,你还可以进一步探索高级主题,如数据仓库、分布式数据库、RAC集群等。学习Oracle不仅是技术的...
Oracle基础涵盖了数据库的安装配置、SQL语言、表空间管理、数据类型、索引、存储过程、触发器、视图、权限与角色以及备份恢复等多个方面。本教程将围绕这些基础知识进行深入讲解。 首先,我们需要理解Oracle数据库...
"第2章 Oracle的体系结构"讲解了Oracle数据库的内部工作原理,包括数据库实例、内存结构、后台进程、数据文件、控制文件和日志文件等。理解这些组件及其相互作用对于日常的数据库管理和问题排查至关重要。 "第5章 ...
数据库的能力 sqlserver -> ORACLE 数据结构 训练编程思维方式 实际问题到计算机问题的转化 linux 熟悉一种新的操作系统 软件工厂 学到的知识 去做一个项目 课程安排 linux操作系统 4天 数据结构 5天 ...
Oracle DBA基础.doc Oracle DBA基础.doc Oracle DBA基础.doc Oracle DBA基础.doc
ORACLE基础知识及故障定位 学校oracle基础知识,包含所有orcale的数据库知识,以及常见问题解决思路,解决方案,问题怎么定位。
本资料“oracle基础知识回顾与练习.zip”是针对Oracle数据库的基础知识进行整理,采用纯SQL语句的形式,适合初学者及需要巩固基础的用户进行学习和实践。 1. SQL基础 SQL(Structured Query Language)是用于管理...
这个"oracle基础知识考试题_答案.zip"压缩包文件包含了关于Oracle数据库的基础知识学习材料,特别是针对初学者或者准备Oracle相关资格考试的人员。 首先,Oracle数据库的核心概念包括SQL(结构化查询语言)的使用,...
这篇“Oracle基础培训文档”旨在为初学者提供一个全面了解Oracle数据库的平台,帮助大家掌握其基本概念、操作和管理技巧。 首先,我们从基础开始,Oracle数据库的核心是SQL(结构化查询语言),它是用于管理和处理...
"Oracle基础教程.pdf" 提供了丰富的学习资源,共分为21章,涵盖了Oracle数据库的核心概念和技术。 第1章:Oracle简介 本章将介绍Oracle数据库的历史、特点和应用领域,以及它在现代企业级数据管理中的重要地位。你...