--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的更多相关文章

  1. CentOS7.2安装mysql-5.7.19多实例

    安装多实例之前首先需要先安装mysql,这里就不介绍如何安装mysql了,参考前面的博客:https://www.cnblogs.com/hei-ma/p/9505509.html 安装多实例之前需要 ...

  2. Android 结合实例学会AsyncTask的用法

    AsyncTask执行时经过四个步骤,执行四个方法: 1.onPreExecute(),运行在UI线程,可以设置或修改UI控件,如显示一个进度条 2.doInBackground,运行在后台线程,不可 ...

  3. Android 结合实例学会AsyncTask的使用方法

    AsyncTask运行时经过四个步骤,运行四个方法:           1.onPreExecute(),执行在UI线程,能够设置或改动UI控件,如显示一个进度条           2.doInB ...

  4. 用斗地主的实例学会使用java Collections工具类

    目录 一.背景 二.概念 1.定义 2.方法 2.1.排序方法 2.2.查找/替换方法 三.斗地主实例 3.1.代码结构 3.2.常量定义 3.3.单只牌类 3.4.玩家类 3.5.主程序 四.深入理 ...

  5. XE3随笔19:实例 - 借用 Google 实现全文翻译

    调用 Google 翻译的地址格式: http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&q=" + ...

  6. Java-Runoob-高级教程-实例-字符串:02. Java 实例 - 查找字符串最后一次出现的位置

    ylbtech-Java-Runoob-高级教程-实例-字符串:02. Java 实例 - 查找字符串最后一次出现的位置 1.返回顶部 1. Java 实例 - 查找字符串最后一次出现的位置  Jav ...

  7. 读《计算机系统要素:从零开始构建现代计算机》的思考:CodeGen

    掌握目标语言的使用.编写 是非常重要的!!! 如果你要实现的Jack语言编译器是把Jack语言代码编译成虚拟机VM代码.或者直接成汇编代码,要完成源代码中unit A——> 目标语言代码转写此u ...

  8. 不一样的Vue实战3:布局与组件

    不一样的Vue实战3:布局与组件  发表于 2017-06-05 |  分类于 web前端|  |  阅读次数 11534 http://yangyi1024.com/2017/06/05/%E4%B ...

  9. ORACLE PL/SQL编程详解

    ORACLE PL/SQL编程详解 编程详解 SQL语言只是访问.操作数据库的语言,并不是一种具有流程控制的程序设计语言,而只有程序设计语言才能用于应用软件的开发.PL /SQL是一种高级数据库程序设 ...

随机推荐

  1. spawn-fcgi启动的一些报错问题

    spawn-fcgi启动报错 //编译生成bin文件,这里用到了fcgi和google的glog # g++ test.cpp -lfcgi -lglog -o test //运行 # spawn-f ...

  2. sed追加文本-sed脚本追加文本

    input为sed输入文件,内容如下: [root@node1 gitlab-test-]# cat inppu.txt aa bb cc dd 追加文本: 1.匹配  aa 行之后追加文本 We a ...

  3. PID控制器开发笔记之十二:模糊PID控制器的实现

    在现实控制中,被控系统并非是线性时不变的,往往需要动态调整PID的参数,而模糊控制正好能够满足这一需求,所以在接下来的这一节我们将讨论模糊PID控制器的相关问题.模糊PID控制器是将模糊算法与PID控 ...

  4. 原生js实现无缝轮播

    原生js实现无缝轮播 因为要做到无缝,所以就要把第一张图片和最后一张连接起来,在此处采用js克隆了第一张图片的节点,添加到最后,显示图片序号的小圆按钮也是使用js动态添加的. html部分 <d ...

  5. linux 修改history带有时间

    今天在网上学到了给linux的history添加时间.方法如下: 首先已知HISTTIMEFORMAT可以给history设置时间:临时修改直接赋值:HISTTIMEFORMAT="%F % ...

  6. SQL入门(1): 创建/查询/更新/连接/视图/SSMS简介

    本文介绍SQL的基本查询语句 (1) select... from  * 表示全部, 选择的东西还可以进行简单的运算, 可以列别名 select * from student; -sage from ...

  7. 别再用"while (!feof(file))"来逐行读取txt文件了!

    起因 执行一个C/C++程序出现segment fault.它逐行读取文本文件,每一行是一个图片名字,然后读图.处理图像,etc. 发现最后一次读取的文件名不存在(空的). 正确的逐行读取txt文件 ...

  8. (转)urllib库python2和python3具体区别

    转载链接:https://blog.csdn.net/whatday/article/details/54710403 Python 2 name Python 3 name urllib.urlre ...

  9. PostgreSQL自学笔记:7 插入、更新与删除数据

    7 插入.更新与删除数据 7.1 插入数据 先创建表person: create table person( id int not null, name char(40) not null defau ...

  10. jQuery中height()不能精确计算的问题

    jQuery中关于高度的计算有三个方法:outerHeight().innerHeight().height() outerHeight():获取元素集合中第一个元素的当前计算高度值,包括paddin ...