19个实例学会plsql
--p1
begin
dbms_output.put_line('你好 世界');
end; --p2 引入变量
declare
age number default 90;
height number := 175;
begin
dbms_output.put_line('年龄'||age||'身高'||height);
end; --p3 变量开始运算
declare
age number default 90;
height number := 175;
begin
dbms_output.put_line('年龄'||age||'身高'||height);
age := age + 20;
dbms_output.put_line('20年后年龄'||age||'岁');
end; --p4 引入表达式
declare
age number default 90;
height number := 175;
begin
if age>70 then
dbms_output.put_line('古稀之年');
else
dbms_output.put_line('风华正茂');
end if;
end; --p5 流程控制
declare
age number default 90;
height number := 175;
gender char(2) := '男';
begin
if gender='男' then
dbms_output.put_line('你可以和女性结婚');
end if; if height>170 then
dbms_output.put_line('可以打篮球');
else
dbms_output.put_line('可以踢足球');
end if; if age<20 then
dbms_output.put_line('年轻小伙');
elsif age <= 50 then
dbms_output.put_line('年轻有为');
elsif age <=70 then
dbms_output.put_line('安享天伦');
else
dbms_output.put_line('佩服佩服');
end if; end; --p6 计算1-100的和
declare
i number :=0;
total number :=0;
begin
loop
i := i+1;
total := total + i; if i=100 then
exit;
end if;
end loop; dbms_output.put_line('总和'||total); end; -- p7: 跳出loop的方法
declare
i number :=0;
total number :=0;
begin
loop
i := i+1;
total := total + i; exit when i>=100;
end loop; dbms_output.put_line('总和'||total); end; --p8 whlie循环
declare
i number :=0;
total number :=0;
begin while i<100 loop i := i+1;
total := total + i; end loop; dbms_output.put_line('总和'||total); end; --p9 for 循环
begin --for 循环变量 in 起始值..结束值 loop
--xxxxx
--end loop; for i in 1..9 loop dbms_output.put_line(i); end loop; for i in reverse 1..9 loop dbms_output.put_line(i); end loop; end; --p10 没有返回值的"函数"
--做一个求面积的过程
--declare
-- area number;
-- procedure 过程名(参数名 类型,...) is
-- begin
-- 主体
-- end;
--begin
--end; declare
area number;
procedure mian(a number,b number) is
begin area := a * b;
dbms_output.put_line(a||'乘'||b||'的面积是'||area); end;
begin mian(5,4);
mian(6,7);
mian(3,7); end; --p11 做一个求面积的函数
--declare
-- area number;
-- function 过程名(参数名 类型,...) return 类型 is
-- begin
-- 主体
-- end;
--begin
--end; declare
area number;
function mian(a number,b number) return number is
begin area := a * b; return area; end;
begin dbms_output.put_line(mian(5,4));
dbms_output.put_line(mian(3,7));
dbms_output.put_line(mian(6,9)); end; --p12 自定义变量类型 之记录类型 declare type student is record
(
sno char(5),
name varchar2(10),
age number
); lisi student; begin lisi.sno := 's1008';
lisi.name := '李四';
lisi.age := 19; dbms_output.put_line('我叫'||lisi.name||',我'||lisi.age||'岁,学号是'||lisi.sno);
end; --p13 自定义类型之集合类型 declare
type answer is table of char(2);
ans answer := answer('a','b','c','d'); begin dbms_output.put_line('共有'||ans.count()||'答案,分别是:');
dbms_output.put_line(ans(1));
dbms_output.put_line(ans(2));
dbms_output.put_line(ans(3));
dbms_output.put_line(ans(4)); end; --p14 声明数据类型的第3个方法 declare
age number;
变量名 另一个变量%type; age 表名.列名%type; --声明和列一样的类型 --简化声明record类型
变量名 表名%rowtype; begin
end; --p15 测试一下rowtype declare
xg student%rowtype;
begin xg.sno := 123;
xg.name := '小刚'; dbms_output.put_line(xg.sno||xg.name); end; --p16 pl/sql操作数据库中的数据
--查询部门的名称及地区,及部门的总薪水与奖金 declare depart dept%rowtype;
total_sal number;
total_comm number; procedure deptinfo(dno number)
is
begin
select dname,loc into depart.dname,depart.loc from dept where deptno=dno;
select sum(sal),sum(comm) into total_sal,total_comm from emp where deptno=dno; dbms_output.put_line('部门名称:'||depart.dname||'在'||depart.loc);
dbms_output.put_line('这个部门每月工资及奖金各是'||total_sal||'和'||total_comm);
end; begin deptinfo(80);
deptinfo(30);
end; --p17 引入异常处理 declare depart dept%rowtype;
total_sal number;
total_comm number; procedure deptinfo(dno number)
is
begin
select dname,loc into depart.dname,depart.loc from dept where deptno=dno;
select sum(sal),sum(comm) into total_sal,total_comm from emp where deptno=dno; dbms_output.put_line('部门名称:'||depart.dname||'在'||depart.loc);
dbms_output.put_line('这个部门每月工资及奖金各是'||total_sal||'和'||total_comm);
end; begin
deptinfo(80);
deptinfo(30);
exception
when NO_DATA_FOUND then
dbms_output.put_line('没有数据');
when others then
dbms_output.put_line('其他错误');
end; --p18:递归过程或函数
--求1->N的和,N允许输入 declare
m number;
total number; function qiuhe(n number) return number
is
begin if n>1 then
return n + qiuhe(n-1);
else
return 1;
end if; end; begin dbms_output.put_line(qiuhe(10)); end; --p19 存储过程/存储函数
create function qiuhe(n number) return number
is
begin if n>1 then
return n + qiuhe(n-1);
else
return 1;
end if; end;
触发器例子
-- g 商品表
create table g
(gid number,
gname varchar2(20),
cnt number
); insert into g values (seq1.nextval,'牛',10);
insert into g values (seq1.nextval,'马',8);
insert into g values (seq1.nextval,'狼',7);
insert into g values (seq1.nextval,'猫',6); -- o 订单表
create table o (
oid number,
gid number,
much number
); 监视:o表
动作: insert
触发: update g
时间:after create trigger 触发器名字
触发时间
监视的动作 on 表名[监视地点]
begin 触发后的动作 end; create trigger t1
after insert on o
begin
update g set cnt=cnt-new.much where gid=new.gid;
end; create trigger t2
after insert on o
for each row
begin
update g set cnt=cnt-:new.much where gid=:new.gid;
end; --表级触发器
create trigger t3
after delete on goods
begin
dbms_output.put_line('有人触发我');
end; --行级触发器
create trigger t4
after delete on goods
for each row
begin
dbms_output.put_line('有人触发我');
end; --before发生的触发器,有机会改sql语句的值
create trigger t5
before insert on o
for each row declare
tmp number; begin select cnt into tmp from g where gid=:new.gid; if :new.much > tmp then :new.much := tmp; end if; update g set cnt=cnt-:new.much where gid=:new.gid; end;
19个实例学会plsql的更多相关文章
- CentOS7.2安装mysql-5.7.19多实例
安装多实例之前首先需要先安装mysql,这里就不介绍如何安装mysql了,参考前面的博客:https://www.cnblogs.com/hei-ma/p/9505509.html 安装多实例之前需要 ...
- Android 结合实例学会AsyncTask的用法
AsyncTask执行时经过四个步骤,执行四个方法: 1.onPreExecute(),运行在UI线程,可以设置或修改UI控件,如显示一个进度条 2.doInBackground,运行在后台线程,不可 ...
- Android 结合实例学会AsyncTask的使用方法
AsyncTask运行时经过四个步骤,运行四个方法: 1.onPreExecute(),执行在UI线程,能够设置或改动UI控件,如显示一个进度条 2.doInB ...
- 用斗地主的实例学会使用java Collections工具类
目录 一.背景 二.概念 1.定义 2.方法 2.1.排序方法 2.2.查找/替换方法 三.斗地主实例 3.1.代码结构 3.2.常量定义 3.3.单只牌类 3.4.玩家类 3.5.主程序 四.深入理 ...
- XE3随笔19:实例 - 借用 Google 实现全文翻译
调用 Google 翻译的地址格式: http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + ...
- Java-Runoob-高级教程-实例-字符串:02. Java 实例 - 查找字符串最后一次出现的位置
ylbtech-Java-Runoob-高级教程-实例-字符串:02. Java 实例 - 查找字符串最后一次出现的位置 1.返回顶部 1. Java 实例 - 查找字符串最后一次出现的位置 Jav ...
- 读《计算机系统要素:从零开始构建现代计算机》的思考:CodeGen
掌握目标语言的使用.编写 是非常重要的!!! 如果你要实现的Jack语言编译器是把Jack语言代码编译成虚拟机VM代码.或者直接成汇编代码,要完成源代码中unit A——> 目标语言代码转写此u ...
- 不一样的Vue实战3:布局与组件
不一样的Vue实战3:布局与组件 发表于 2017-06-05 | 分类于 web前端| | 阅读次数 11534 http://yangyi1024.com/2017/06/05/%E4%B ...
- ORACLE PL/SQL编程详解
ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...
随机推荐
- uploadPreview上传图片前预览图片
uploadPreview.js是一款图片上传前的预览插件.谷歌.火狐.IE都可以兼容,但是不支持safari. 相关的html代码: <!DOCTYPE html PUBLIC "- ...
- 微信小程序【获取验证码】倒计时效果
最近开始接触微信小程序,会记录一些相关的小功能——例如这次是点击[获取验证码]按钮出现的倒计时效果. 原文: http://blog.csdn.net/Wu_shuxuan/article/detai ...
- GNU MAKE参考文档
1.GNU MAKE翻译 https://blog.csdn.net/xiejinfeng850414/article/details/8625468 2.Linux Makefile 生成 *.d ...
- 【原创】大数据基础之Kafka(1)简介、安装及使用
kafka2.0 http://kafka.apache.org 一 简介 Kafka® is used for building real-time data pipelines and strea ...
- Object.freeze(); 方法冻结一个对象。
Object.freeze() 方法可以冻结一个对象.一个被冻结的对象再也不能被修改: 冻结了一个对象则不能向这个对象添加新的属性,不能删除已有属性,不能修改该对象已有属性的可枚举性.可配置性.可写性 ...
- 使用font awesome制作网站常用社交工具联系方式图标
在公司项目或者个人建站时经常会有这么一个需求,就是在网站的底部以图标的形式加入自己的某些常用社交联系方式,比如QQ.微信.微博.Twitter等等,如果采用传统切图的方式去制作这些图标会有两个缺点: ...
- java设计模式自我总结---代理模式
代理模式是给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用,通俗的来讲代理模式就是我们生活中常见的中介. Spring 的AOP面向切面就是使用动态代理模式来实现的: 打个比方说:我要买房 ...
- 金蝶K3 WISE BOM多级展开_物料齐套表
/****** Object: StoredProcedure [dbo].[pro_bobang_ICItemQiTao] Script Date: 07/29/2015 16:12:10 **** ...
- Unix历史及相关概念回顾
欢迎来到Unix的世界 很多人都用了很多年的Unix(其实更熟悉的是叫Linux),也接触到Unix世界中的各种概念,比如GCC.GNU.BSD.POSIX.GPL等等,也大都知道一些传奇的如雷贯耳的 ...
- windows控件理论学习
mmp快考试了还在浪 一.对话框编辑器创建控件 1.使用new在堆上创建,系统结束时我们需要使用delete去销毁控件 2.对话框编辑器控件,程序结束,自动销毁 二.控件类的基类 CWnd类和消息映射 ...