--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. radio日志sim卡信号状态分析

    logcat -b radio日志 // 接着将slot 0主卡置为false,将slot 1设置为true 08-09 11:24:40.335 2565 3243 D RILJ : [4820]& ...

  2. Spring系列(二) Bean装配

    创建应用对象之间协作关系的行为称为装配(wiring), 这也是DI的本质. Spring中装配Bean的方式 Spring提供了三种装配Bean的方式. 隐式的Bean发现机制和自动装配 Java ...

  3. POJ 1556 The Doors(线段相交+最短路)

    题目: Description You are to find the length of the shortest path through a chamber containing obstruc ...

  4. 解决radio、select表单返回时,再次选择失效

    应用场景:我们在选择好radio跟select之后提交表单,返回历史记录时,再次选择,提交表单,发现提交的是上次表单选择的 解决办法:我们可以一进页面就给radio跟select的选项重置掉,因为,返 ...

  5. day14 集合与函数

    数据类型和变量总结 字符串.数字.列表.元组.字典 可变:列表,字典 不可变:修改变量的值ID变,字符串,数字,元组 访问顺序: 直接访问:数字 顺序访问:字符串,列表,元组 映射:字典 存放元素个数 ...

  6. 51nod--1006 最长公共子序列Lcs (动态规划)

    题目: 给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个 ...

  7. 【转】Java中文乱码的解决

    在基于Java的编程中,经常会碰到汉字的处里及显示的问题,比如一大堆乱码或问号. 这是因为JAVA中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码, ...

  8. mybatis 保存对象 参数类型

    简单介绍:保存单个对象 ,参数类型的设置,正常的话应该设置成对应的pojo,我想起了以前,不懂事时候的一个做法,其实那时候刚接触到mabatis,做新增的时候,直接就是把需要插入表中的值,放到map里 ...

  9. jq-css、class、属性操作

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. python-argparse批量修改后缀名-batch_file_rename.py

    #!/bin/usr/env python3 __author__ = 'nxz' import os import argparse def batch_rename(work_dir, old_e ...