77范文网 - 专业文章范例文档资料分享平台

ORACLE课堂讲义(13~18)

来源:网络收集 时间:1970-01-01 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

ORACLE课堂讲义

(课堂讲义有三部分共十八讲,点我ID看其他的,授课老师:贾峰)

第十三讲

PL/SQL编程

编程比java简单的多,要知道数据库的主要作用。PL/SQL在sqlplus不适合测试,我们为了方便用plsql developer界面工具测试。 一、PL/SQL程序块的基本结构 declare --声明部分,可以省略 begin --编写主题

exception --捕获异常,可以省略 end;

1、只包含执行体程序块实例

看一个简单的PL/SQL块,必须有begin和and。 begin

dbms_output.put_line('Hello World'); end;

此时,直接执行程序即可。执行之后发现没有任何输出。因为Oracle在系统设置中默认设置了输出不显示,如果要显示的话,输入以下sqlplus命令:

set serveroutput on

dbms_output.put_line('Hello World');这条语句的作用类似于java程序中system.out.println (“HELLO WORLD”);用于输出操作结果。 2、包含执行体、声明部分和异常部分的程序块

【例】程序中,声明部分声明一个变量v_sal;在程序执行部分,将员工SCOTT的工资赋予变量v_sal并输出结果;在异常处理部分,捕捉出现异常,如果查询到多条记录或没有查询到或其他情况,打印出相应异常结果。 declare

v_sal number := 0; begin

select sal into v_sal

from emp where ename = 'SMITH';

dbms_output.put_line('sal is '||v_sal);--||字符串连接符 exception

when too_many_rows then

dbms_output.put_line('too many rows!'); when no_data_found then

dbms_output.put_line('no data!!'); when others then

dbms_output.put_line('some error!'); end;

dbms_output.put_line('sal is '||v_sal);其中“||”字符串连接符,相当于java当中的“+”。Exception异常这里列举3种异常类型,详细看书P298表9-8.

就像我们java中try…catch…一样。 try{}

catch(NullPointerException e){ System.out.println(“null”); }catch(NumberFormatException e){

System.out.println(“number”);

}catch(Exception e){

System.out.println(“other error!!!”);

}

二、PL/SQL的变量 --PL/SQL中的简单变量定义 v_gender char(1); --没有初始值 v_sal number := 0; --初始值为0

v_date date:=sysdate+7 --初始值为当前日期七天后日期 --使用%type定义简单变量

通过%type属性来为变量声明类型,简单的说利用一个已经声明过的变量或者数据表的列来定义变量,新的变量类型与参照的类型完全相同。 例如:PL/SQL中使用%type定义简单变量 v_name emp.ename%type; v_deptno emp.deptno%type 三、在PL/SQL中使用SQL语句 1、PL/SQL程序中使用SELECT语句

注意一些语法特点: SELECT list INTO variable_name FROM table WHERE condition;

(1) 查询列表后必须使用into子句,用于将查询出字段值传递给变量; (2) 查询语句必须并且只能返回一行,多于一行或没有返回结果都会产生异常; (3) 可以使用完整的SELECT语法。

【例】在PL/SQL中使用select语句,取出某个员工的姓名和工资。其中使用替

代变量输入查询的员工的职员编码。 declare

v_name emp.ename%type; v_sal emp.sal%type; begin

select ename,sal into v_name,v_sal from emp

where empno=&no;

dbms_output.put_line('职员名字是:'||v_name); dbms_output.put_line('职员工资是:'||v_sal); end;

--注意:如果把where deptno = &no;换成这一句,那么结果就会报错。 2、PL/SQL程序中使用DML语句

select语句在语法和要求上有所改变,但是DML语句(insert,update,delete)在PL/SQL并没有任何改动。

【例】使用INSERT命令增加一个新的部门到部门表中。和SQL语句中的INSERT

语法完全相同。 declare

v_dno dept.deptno%type; v_dname dept.dname%type; begin

v_dno:=&dno; v_dname:='&dname';

insert into dept(deptno,dname) values(v_dno,v_dname);

commit; end; --测试

输入dno的值:50;输入dname的值:LEARNING 四、条件判断语句

--条件分支语句语法结构如下: IF condition THEN statements;

[ELSIF condition THEN statements;] [ELSE statements;] END IF;

在这个语法中使用IF语句可以根据设置的条件进行判断,选择条件分支中的某个分支进行操作,并且最多允许有一个ELSE子句。

【例】判断如果职位是“ANALYST”,则设置薪水增加10%,增加值为是“CLERK”,

则薪水增加20%,其余职位增加5%。 declare

v_empno emp.empno%type; v_job emp.job%type; begin

select empno,job into v_empno,v_job from emp where empno = &v_eno; if v_job = 'ANALYST' then

update emp set sal=sal*1.1 where empno=v_empno; elsif v_job='CLERK' then

update emp set sal=sal*1.2 where empno=v_empno; else

update emp set sal=sal*1.05 where empno=v_empno; end if; end;

--注意:在多分支语句中,ELSIF的写法,不要分开写成ELSE IF。 五、循环语句

除了IF语句外,PL/SQL程序中的另一种程序控制语句就是循环。循环用于

根据条件一次或者多次执行某些语句。

在PL/SQL程序中有三种循环类型:简单循环、FOR循环和WHILE循环,1、我们先介绍一下FOR循环语法结构: FOR index IN lower . .upper LOOP Statement1;… END LOOP;

【例】在循环中通过一个计数器作为循环结束的标记,当计数器大于10的时候,

结束循环。本例中将会插入到表temp中10个顺序递增的数字,假设temp表中只有一个数字类型的列。 declare

v_counter number; begin

for v_counter in 1..10 loop

insert into temp values(v_counter); end loop; end;

2、WHILE循环语法结构: WHILE condition LOOP Statement1;… END LOOP;

【例】用WHILE循环实现上面的例子,同样插入10条递增的记录。 declare

i number :=1; begin

while i<=10 loop

insert into temp values(i); i:=i+1; end loop; end;

第十四讲

PL/SQL程序单元

前面讲解PL/SQL程序的基本概念和语法,下面将开始编写PL/SQL程序。这种程序可以带参数,存储在数据库中,目的是将业务逻辑集成在程序块中,简化客户端的开发和维护,并且可以在不同应用程序中多次调用。 --PL/SQL程序单元重要包括四类: ◆存储过程 Procedure( 了解 )

过程( Procedure )是一种 PL/SQL存储程序单元,主要用于在数据库中完成特定的操作或者任务,如果在程序中经常需要执行某个操作,可以于这些操作建立一个过程,用于简化客户端的开发和维护,以及提高执行性能。 ◆函数Function( 了解 )

PL/SQL中的函数被用来执行复杂的计算,并返回计算结果。 ◆包Package( 了解 )

? 包是一种比较特殊的PL/SQL程序,它并不是一个PL/SQL存储程序块,而是用于将相关的存储过程和函数组织起来,组成 PL/SQL存储程序组。 ? 包由两个独立部分组成:包头和包体。 ◆触发器Trigger( 了解 )

? PL/SQL程序中的触发器的结构类似于函数和过程,与函数和过程不同,触发器是在事件发生时隐式地运行的。相当于Java 语言中的事件监听器。

一、函数Function

--函数:必须返回数据,在sql语句中生效,通常是用来计算。 --函数就是一个有返回值的过程。 1、 创建函数的语法结构如下:

create or replace function name return datatype is

变量、常量声明; begin

SQL和PL/SQL语句; return value; [exception] 异常语句

end;

【例】:定义一个函数,此函数用来计算个人所得税率: 0-1000 0% 1001-2000 1% 2001-3000 2% 大于3000 4%

create or replace function tax_ning(

v_sal number) return number is

v_result number; begin

if (v_sal < 1000) then

v_result := 0;

v_result := v_sal * 0.01; elsif (v_sal < 2000) then elsif (v_sal < 3000) then v_result := v_sal * 0.02; else

v_result := v_sal * 0.04; end if;

return v_result; end;

--测试函数的使用

SQL>select ename, sal, tax_ning(sal) from emp;

--在数据字典里查看函数。 SQL> col line format 99

SQL> col text format a50 --查看过程源代码前规范格式 SQL> select line,text from user_source

where name='TAX_NING'; --查看过程源代码

【例】:定义一个函数,输入参数:deptno,输出参数;部门人数。 create or replace function emp_count(

v_deptno emp.deptno%type)

return number is

v_count number; begin

select count(*) into v_count from emp where deptno = v_deptno; return v_count; end; --测试

SQL>select emp_count(30) from dual;

二、过程Procedure:

--过程:可以不返回数据,可以独立调用,通常执行某些动作。 1、 创建过程的语法结构如下:

create or replace procedure name[(parameter,…)] is

变量、常量声明; begin

SQL和PL/SQL语句; [exception] 异常语句 end;

其中过程参数prameter的语法如下:parameter_name[IN|OUT|IN OUT] datatype,IN,OUT和IN OUT三种模式分别具有不同的使用特性,IN用于从调用环境传入参数值,如果忽略参数模式,则默认为是IN;OUT用于将值通过参数传出到调用环境;IN OUT即可以传入值,也可以传出值。 【例】:定义一个过程,输入参数:deptno,输出参数:部门人数。 create or replace procedure myproc( v_deptno emp.deptno%type) is

v_count number; begin

select count(*) into v_count from emp where deptno = v_deptno;

dbms_output.put_line (v_count); end;

--测试过程的方式,在sqlplus中测试: SQL>exec myproc(20)

--在数据字典里查看过程。 SQL> col line format 99

SQL> col text format a50 --查看过程源代码前规范格式 SQL> select line,text from user_source

where name='MYPROC'; --查看过程源代码

--有输出参数的过程

【例】:创建一个过程,定义了一个输入参数以及两个输出参数。 create or replace procedure calcu_emp( v_deptno in number, v_sum_sal out number, v_avg_sal out emp.sal%type) is begin

select sum(sal), avg(sal) into v_sum_sal, v_avg_sal from emp

where deptno = v_deptno;

end;

--测试有输出参数的过程: declare

v_sum number; v_avg number;

calcu_emp(10, v_sum, v_avg); dbms_output.put_line(v_sum); dbms_output.put_line(v_avg);

begin

end;

--功能:修改员工薪水。

--输入参数:员工编码,新的薪水值。

【例】:如果员工的职位不是MANAGER或者PRESIDENT,且薪水高于15000,则报错“too many sal”。否则,修改指定员工的薪水为指定值,显示“update success!”。

create or replace procedure changesal(

v_empno emp.empno%type, v_sal emp.sal%type) v_job emp.job%type;

is begin

select job into v_job

from emp where empno = v_empno;

if(v_job not in ('MANAGER','PRESIDENT') and v_sal > 15000) then dbms_output.put_line('too many sal'); else

update emp set sal = v_sal where empno = v_empno;

dbms_output.put_line('update success!'); end if; exception

when others then

--测试方式

SQL>exec changesal(7788, 20000);--满足条件报错,too many sal SQL>exec changesal(7698, 20000);--不满足条件,修改

是经理,工资高于15000。

dbms_output.put_line('some error!'); end;

第十五讲

Oracle 11g图形界面创建数据库实例

Oracle体系结构是指Oracle的组成、工作过程和基本原理,以及数据在数据库中的管理和组织机制。作为数据库使用者,软件开发人员通常比较关注SQL和PL/SQL,在软件开发过程中,因为有DBA的协助,对于数据库管理和运行及可用性无需太多关注。但是对于Oracle体系结构了解,有助于帮助软件开发人员编写高效的SQL及过程、函数等程序块,有助于整个项目在数据库环节上性能的提升。

Oracle数据库的结构属于典型的C/S模式,一个运行着的Oracle数据库就可以看成是一个Oracle Server,由实例(Instance)和数据库(Database)组成,一般情况下,一个Oracle Server包含一个实例和一个与之对应的数据库。

实例(Instance)是指内存结构,当数据库启动时,Oralce占用一定的内存空间,实例就是指此时的内存结构和后台进程。当数据库服务器关闭,实例也不存在了。

数据库(Database)是由一些物理文件和与之对应的逻辑结构(表空间、段等)组成的。这些文件包括数据文件、控制文件、重做日志文件、参数文件以及归档日志文件等。

数据库服务器(Database Server)是指实例、数据库以及各软件组件如SQL*Plus等组成。也就是安装在服务器上数据库软件和启动后实例组成。

Step1创建数据库实例:

进入开始->所有程序->Oracle-OraDB11g_home1->配置和移植工具->Database Configuration Assistant

进入后如图所示:默认选项创建数据库,点击下一步:

默认一般事务和用途,点击下一步:

输入数据库名和sid,以student为例,(注:如果提示没有创建监听器,请

在开始->所有程序->Oracle-OraDB11g_home1->配置和移植工具->

Net Configuration Assistant进行配置,这里就不一一熬述了)点击下一步:

打开”步骤4(共14步):管理选项”对话框,配置管理选项,点击下一步:

如果出现监听警告提示,需要开启OracleOraDb11g_home1TNSListener服务:

为不同账户设置不同的口令,我们选择所有账户使用统一管理口令:123456,(实际上DBA应该为不同的账户使用不同的口令,可以选中“使用不同管理口

令”选项,为不同账户输入不同的口令)。点击下一步:

配置存储选项,选择“文件系统”选项,创建的Oracle11g数据库将使用文件系统进行数据库的存储。点击下一步:

数据库文件所在的位置,这里我们 指定要创建数据库文件的位置为“使用模板中的数据库文件位置”点击下一步:

恢复配置对话框,采用默认选项“指定快速恢复区”,点击下一步:

数据库内容对话框,配置数据库内容,点击下一步:

内容配置后,进入初始化参数对话框,选择“字符集”选项卡,设置数据库字符集为GBk还是UTF-8,点击下一步:

安全设置对话框,配置数据库安全选项,这里保持默认设置,点击下一步:

配置自动维护任务对话框,同样保持默认设置,点击下一步:

数据库存储对话框,(DBA对控制文件、数据文件、重做日志文件进行修改),

点击下一步:

选中“创建数据库”选项,当DBA需要将创建数据库以脚本的形式保存下来时,勾选“生成数据库创建脚本”,并指定脚本存放 的目标目录。点击完成:

单击“确定”按钮,完成创建Oracle 11g数据库所有配置工作,正式进入创建过程,将依次经过复制数据文件、创建oralce实例、数据库创建和运行定制脚本4个步骤。

记录下URL: https://lenovo-THINK:5500/em,因为我们等下要用它登陆控制台创建表空间;点击退出完成数据库实例创建。

Step2 Oralce数据库实例的启动和关闭

在IE中打开https://lenovo-THINK:5500/em(如果显示无法找到网站,请在控制面板—管理工具—服务中启动OracleDBConsolet 服务)Oracle实例、Oracle数据库和Oracle服务器。

一般的,数据库分为两个部分:实例(Instance)和数据库(Database)。实例是一个非固定的、基于内存的基本进程与内存结构,当服务器关闭后,实例也就不存在了。

而数据库是固定的、基于磁盘的数据文件、控制文件、日志文件、参数文件和归档日志文件等。

在一般情况下,一个Oracle数据库包含一个实例。默认的,当一个新的数据库创建完成之后,与该数据库实例相关的服务处于自动启动的状态。

Oracle服务的启动和关闭是在后台服务进程方式进行的,如OracleDBConsolestudent、OracleJobSchedulerSTUDENT和OracleServiceSTUDENT等,即可启动关闭数据库。

使用OEM也可以关闭数据库实例,点击“关闭”:

此时要求对用户进行身份验证,分别输入正确的操作主机身份证明(用户名/口令)和数据库身份证明,“输入主机身份证明”指定操作系统的用户名和口令, 指的是你系统的用户名和密码,如果系统没有设置密码请设置一个。设置好单击”确定”按钮。

当关闭操作完成后,即可单击“刷新”按钮返回Database Control页面。

CREATE SESSION --建立会话 CREATE SYNONYM --建立同义词 CREATE VIEW --建立视图

RESOURCE角色: --是授予开发人员的

CREATE CLUSTER --建立聚簇 CREATE PROCEDURE --建立过程 CREATE SEQUENCE --建立序列 CREATE TABLE --建表

CREATE TRIGGER --建立触发器 CREATE TYPE --建立类型

DBA角色:

拥有系统所有系统级权限

IMP_FULL_DATABASE角色、EXP_FULL_DATABASE角色:

BACKUP ANY TABLE --备份任何表

EXECUTE ANY PROCEDURE --执行任何操作 SELECT ANY TABLE --查询任何表

DELETE_CATALOG_ROLE角色:

这个角色是Oracle8新增加的,如果授予用户这个角色,用户就可以从表sys.aud$中删除记录,

sys.aud$表中记录着审计后的记录,使用这个角色可以简化审计踪迹管理。

SELECT_CATALOG_ROLE角色、EXECUTE_CATALOG_ROLE角色:

SELECT_CATALOG_ROLE角色具有从数据字典查询的权利,

EXECUTE_CATALOG_ROLE角色具有从数据字典中执行部分过程和函数的权利。 fromoradb

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库ORACLE课堂讲义(13~18)在线全文阅读。

ORACLE课堂讲义(13~18).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/216184.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: