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是一种高级数据库程序设 ...
随机推荐
- https协议的简单理解
本片文章梳理三个知识点: 1.对称加密和非对称加密的区别 2.https协议的请求流程 3.http协议和https协议的区别 一.对称加密和非对称加密 对称加密:加密和解密使用同一密钥. 非对称加密 ...
- C#学习笔记-XML的读写(一)
需要解析的配置XML <?xml version="1.0" encoding="utf-8" ?> <configurations> ...
- ios9 safari currentTime audio bug
var audio = document.createElement('audio') audio.src = 'https://ic-static.vipkidteachers.com/course ...
- unity 网页加载AB问题
下载一次后会缓存,清理一下就能加载新的同名AB了 AssetBundle.onload
- Jmeter性能测试之Monitor监控(SSHMon Samples Collector)
前面写的一篇Monitor监控有缺陷, 这篇文章使用Jmeter4.0+的版本, 使用插件SSHMon Samples Collector来做资源监控 1. 官网下载插件: plugins-manag ...
- ==、Equals 、ReferenceEquals它们的异同
链接 string foobar = "foobar"; string foobar2 = new StringBuilder().Append("foo"). ...
- Java Spring Boot VS .NetCore (五)MyBatis vs EFCore
Java Spring Boot VS .NetCore (一)来一个简单的 Hello World Java Spring Boot VS .NetCore (二)实现一个过滤器Filter Jav ...
- maven build pulgin
<build> <defaultGoal>compile</defaultGoal> <plugins> <!-- 生成清单文件相关 --> ...
- 设计模式学习之享元模式(Flyweight,结构型模式)(20)
转:http://terrylee.cnblogs.com/archive/2006/03/29/361767.html 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是 ...
- beta冲刺3/7
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:beta冲刺(3/7) 团队部分 后敬甲(组长) 过去两天完成了哪些任务 整理博客 ppt模板 接下来的计划 做好机动. ...