Oracle实训高级编程

高级数据库编程

1、PL/SQL 简介:
PL/SQL 代表 Procedural Language/SQL(Procedural Language:过程语言)
它是对 SQL 的扩展

严密的安全性
对客户机和服务器之间的应用程序逻辑进行分隔,客户端只执行存储过程

2、PL/SQL 引擎
处理 PL/SQL 块并将其分离为 SQL 语句及过程语句:
a.将过程语句发送到过程语句执行器以进行处理
b.将 SQL 语句发送到 SQL 语句执行器以进行处理

3.PL/SQL块的结构

a.PL/SQL 的各个组成部分:
声明部分
可执行部分
异常处理部分

b.PL/SQL 块的结构:
DECLARE
declarations
BEGIN
executable statements
EXCEPTION
handlers
END;

其中,declarations 是声明,executable statements 是可执行语句,handlers 是处理程序

4.输出:DBMS_OUTPUT.PUT_LINE();

5.如何定义变量:
格式:declare 变量名1 数据类型1:=初始值1;
declare mynum varchar2(20):=‘abc‘;

6.对变量赋值有两种,分别见下面的例子
a、:=进行赋值
b、 select into 变量名进行赋值
第一种赋值:
Declare
n number;str varchar2(20);
begin
n:=100*3;
str:=‘&abc‘;--弹出对话框,获取输入的赋值给变量str
dbms_output.put_line(n||‘,’||str);--其中||是连接字符串的意思,并打印到界面
end;

第二种赋值:
select tname into tnames from temp where tid=2;
--打印到界面
dbms_output.put_line(‘类型名称:‘|| tnames);

7、条件控制语句:
IF-THEN
IF-THEN-ELSE
IF-THEN-ELSIF

IF <条件> THEN
语句;
END IF;

IF <条件> THEN
语句;
ELSE
语句;
END IF;

IF <条件1> THEN
语句;
ELSIF <条件2> THEN
语句;
ELSIF <条件3> THEN
语句;
ELSE
语句;
END IF;

8.循环控制语句:
使用loop,无条件循环,从1累加到100,采用exit配合if退出
declare
i number:=1; --定义循环次数变量i
total number:=0; --定义累加结果变量total
begin
loop
total:=total+i;
i:=i+1;
if i>100 then
exit;
end if;
end loop;
dbms_output.put_line(‘最终结果:‘||total);
end;

9、异常
当在 PL/SQL 程序中出现错误时,将引发异常
在出现错误时,正常执行将停止,控制权转移到异常处理部分
declare
i number:=0; n number:=0;
begin
i:=100/n;--这里会报错,除数为0
dbms_output.put_line (‘结果:‘||i);
Exception
--当不知道是什么错误的时候就写others
when others then
--sqlerrm这个会打印错误信息
dbms_output.put_line(‘异常:‘||sqlerrm);
end;

10、存储过程的定义和使用
实际开发中通常把复杂的业务封装在过程中。
创建过程的语法:

CREATE [OR REPLACE] PROCEDURE
<procedure name> [(<parameter list>)]
IS|AS
<local variable declaration> 声明变量declare关键字
BEGIN
<executable statements>
[EXCEPTION
<exception handlers>]
END;

注:通过处理我们一般都想得到一个或者多个结果,如何通过存储过程带出一个或多个结果呢?
过程参数的三种模式:
IN
用于接受调用程序的值
默认的参数模式
OUT
用于向调用程序返回值
IN OUT
用于接受调用程序的值,并向调用程序返回更新的值
执行存储过程可以使用EXEC命令或者在其它过程中调用。

11、存储函数的定义和使用
我们已经很多ORACLE内置的函数,那么能不能自己定义函数呢?
函数是可以返回值的命名的 PL/SQL 子程序。
创建函数的语法:
CREATE [OR REPLACE] FUNCTION
function name [(param1,param2)]
RETURN datatype IS|AS -- 返回值类型
[local declarations]
BEGIN
Executable Statements;
RETURN result; -- 记得要返回结果
EXCEPTION
Exception handlers;
END;
类比java 语言中的方法定义
删除函数 drop function fun_name;

12.触发器的定义和使用
触发器是当特定事件出现时自动执行的存储过程
特定事件可以是执行更新的DML语句和DDL语句
触发器不能被显式调用
触发器的功能:
自动生成数据
自定义复杂的安全权限
提供审计和日志记录
启用复杂的业务逻辑

CREATE [OR REPLACE] TRIGGER trigger_name
AFTER | BEFORE | INSTEAD OF
[INSERT] [[OR] UPDATE [OF column_list]]
[[OR] DELETE]
ON table_or_view_name
[REFERENCING {OLD [AS] old / NEW [AS] new}]
[FOR EACH ROW]
[WHEN (condition)]
pl/sql_block;

注意:
:new 和 :old 是oracle触发器里的行处理时的新值和旧值的行记录。

是固定用法。

可以
UPDATE E1 SET DEPTNO = ‘ABC’ || :NEW.DEPTNO WHERE DEPTNO =:OLD.DEPTNO;

也可以在触发器中定义一个变量 v_aaa,然后赋值:

v_aaa := :NEW.DEPTNO;

时间: 2024-08-10 21:18:57

Oracle实训高级编程的相关文章

Oracle PL/SQL 高级编程

1. 复合数据类型--记录类型 ?        语法格式 type  类型名 is   record ( 字段1  字段1类型 [not null]:=表达式1; 字段2  字段2类型 [not null] :=表达式2; - ) ?        说明:记录之间相互赋值要求两个记录类型完全相同. ?        案例 举例1 --创建表并插入记录 create table student(idnumber, name varchar2(20), birthday date); insert

oracle PL/SQL高级编程

PL/SQL高级编程 实验目的: 1.掌握PL/SQL的数据结构和编程结构,掌握应用PL/SQL编写简单程序的方法 2.理解存储过程的概念,掌握编写存储过程的方法 3.理解函数的概念,掌握编写存储过程的方法实验内容:一.PL/SQL编程基础1.pl/sql的组成:声明块.执行块.异常处理块2.编制代码实现1+2+...+100的计算declare n int; result int;begin n:=0; result:=0; while n<=100 loop result:=result+n

程序编程实训库源代码

/* * File: stdgen.h * ----------------------------------------------------- * The basic definitions provided by stdgen.h are: * * 1. Declarations for several new "primitive" types * (most importantly string) that are * used throughout the other

oracle sql 高级编程 历史笔记整理

20130909 周一 oracle sql 开发指南 第7章 高级查询 1.层次化查询select level,ttt.*,sys_connect_by_path(ttt.col1,',') from ttt start with .. Connect by prior -因为先建立树,再进行where过滤的.在where中过滤和在cooonect by中过滤是不一样的. 2.rollup cube高级查询 select grouping(col1) .. From ttt group by

可编程控制器实训

打开GX,新建工程,参数默认. 用 -||- -|/|- -()- — | 从电气控制实训的图转可编程的 例子: SB对应输入继电器    -||-       -|/|-   X0~X7,  X0~X17,X20~X7(注释:大小写会自动变换,序号会自动填充为X000,X007…) KM对应输出继电器    -||-       -|/|-     -()-    Y0~Y7,Y10~Y7(注释:大小写会自动变换,序号会自动填充为Y000,Y007…) KT对应定时器     -||- 长开和

程序编程实训:Tic-Tac-Toe实现

输出界面如图所示: tic-tac-toe源代码: /* * File: tictac.c * -------------- * This program plays a game of tic-tac-toe with the user. * The program is designed to emphasize the separation between * those aspects of the code that are common to all games and * thos

爱尚实训告诉你”程序猿”如何选择Java编程学校

现在什么人才最吃香,恐怕大家脱口而出的就是"程序员"吧.没错,多年前,我们认为电影中出现的高科技.震撼的场景也只会出现在电影中,而现在,真的活生生出现在我们身边,而且与我们密不可分.从手机里各种APP软件,到各种电脑软件,你别不信,当你打开淘宝.京东,你看的一个个网页,就是用Java技术里的html 前端技术开发的,当你玩着<我的世界>.<王者农药>时,知不知道他们也是用Java开发的,只要你能用到电子产品,就会接触到和Java有关的,这也意味着,程序员的&qu

深圳软件培训-软件开发培训-汇道IT实训

"汇道"软件培训共开设16门课程:ios开发,android开发,java培训,深圳美工培训,深圳UI设计培训,php培训...时间从每周周一开始,至周五结束,共计5次课,每周的周末进行深圳软件培训免费试听(周六和周日),一节课的时长约为3个小时. 深圳软件培训招生 一.学习专业: 软件开发(安卓系统andriod运行软件.苹果系统ios运行软件) 服务器端(java语言)运行软件的开发,主要是网站开发. 二.招生目标: 招生方向培训班采用汇道教育人才培训方案,使用"汇道IT

实训二(cocos2dx 2.x 打包apk)

利用cocos2dx编程得到的展现形式之一就是最终的apk,中间的过程只有自己走过才能知道,对于没有章法的初学者,那是相当的头疼, 言归正传,2.x到3.x版本引擎变动很大,除去了CC只是很小一方面,就有很多人不适应,打包apk的方法上也有了很多不同. 本文主要会介绍在windows平台上,利用Cocos2dx 2.x版本引擎打包apk的过程. Cocos2d-x 2.x版本引擎 打包apk 1.环境+工具 VS2013.android-ndk-r9d.android-sdk-windows-r