set serveroutput on
declare
a int:=100;
b int:=200;
c number;
begin
c:=(a+b)/(a-b);
dbms_output.put_line(c);
exception
when zero_divide then
dbms_output.put_line('除数不许为零!');
end;
/
set serveroutput on
declare
var_ename emp.ename%type; --声明与ename列类型相同的变量
var_job emp.job%type; --声明与job列类型相同的变量
begin
select ename,job
into var_ename,var_job
from emp
where empno=7369; --检索数据,并保存在变量中
dbms_output.put_line(var_ename||'的职务是'||var_job); --输出变量的值
end;
/
set serveroutput on
declare
type emp_type is record --声明record类型emp_type
(
var_ename varchar2(20),--定义字段
var_job varchar2(20),
var_sal number
);
empinfo emp_type; --定义变量
begin
select ename,job,sal
into empinfo
from emp
where empno=7369;--检索数据
--输出雇员信息
dbms_output.put_line('雇员'||empinfo.var_ename||'的职务是'||empinfo.var_job||'、工资是'||empinfo.var_sal);
end;
/
set serveroutput on
declare
rowVar_emp emp%rowtype; --定义能够存储emp表中一行数据的变量rowVar_emp
begin
select *
into rowVar_emp
from emp
where empno=7369;--检索数据
/*输出雇员信息*/
dbms_output.put_line('雇员'||rowVar_emp.ename||'的编号是'||rowVar_emp.empno||',职务是'||rowVar_emp.job);
end;
/
set serveroutput on
declare
var_name1 varchar2(50);
var_name2 varchar2(50);
begin
var_name1:='East';
var_name2:='xiaoke';
if length(var_name1) < length(var_name2) then
dbms_output.put_line('字符串“'||var_name1||'”的长度比字符串“'||var_name2||'”的长度小');
end if;
end;
/
set serveroutput on
declare
age int:=55;--定义整形变量并赋值
begin
if age >= 56 then--比较年龄是否大于56岁
dbms_output.put_line('您可以申请退休了!');--输出退休信息
else
dbms_output.put_line('您小于56岁,不可以申请退休了!');--输出不可退休信息
end if;
end;
/
set serveroutput on
declare
month int:=10;--定义整形变量并赋值
begin
if month >= 0 and month <= 3 then--判断春季
dbms_output.put_line('这是春季');
elsif month >= 4 and month <= 6 then--判断夏季
dbms_output.put_line('这是夏季');
elsif month >= 7 and month <= 9 then--判断秋季
dbms_output.put_line('这是秋季');
elsif month >= 10 and month <= 12 then--判断冬季
dbms_output.put_line('这是冬季');
else
dbms_output.put_line('对不起,月份不合法!');
end if;
end;
/
set serveroutput on
declare
season int:=3;--定义整形变量并赋值
aboutInfo varchar2(50);
begin
case season
when 1 then
aboutInfo := season||'季度包括1,2,3月份';
when 2 then
aboutInfo := season||'季度包括4,5,6月份';
when 3 then
aboutInfo := season||'季度包括7,8,9月份';
when 4 then
aboutInfo := season||'季度包括10,11,12月份';
else
aboutInfo := season||'季节不合法';
end case;
dbms_output.put_line(aboutinfo);
end;
/
set serveroutput on
declare
sum_i int:= 0;--定义整数变量,存储整数和
i int:= 0;--定义整数变量,存储自然数
begin
loop--循环累加自然数
i:=i+1;--得出自然数
sum_i:= sum_i+i;--计算前n个自然数的和
exit when i = 100;--当循环100次时,程序退出循环体
end loop;
dbms_output.put_line('前100个自然数的和是:'||sum_i);--计算前100个自然数的和
end;
/
set serveroutput on
declare
sum_i int:= 0;--定义整数变量,存储整数和
i int:= 0;--定义整数变量,存储自然数
begin
while i<=99 loop
i:=i+1;--得出自然数
sum_i:= sum_i+i;--计算前n个自然数的和
end loop;
dbms_output.put_line('前100个自然数的和是:'||sum_i);--计算前100个自然数的和
end;
/
set serveroutput on
declare
sum_i int:= 0;--定义整数变量,存储整数和
begin
for i in reverse 1..100 loop --遍历前100个自然数
if mod(i,2)=0 then --判断是否为偶数
sum_i:=sum_i+i;--计算偶数和
end if;
end loop;
dbms_output.put_line('前100个自然数中偶数之和是:'||sum_i);
end;
/
set serveroutput on
declare
/*声明游标,检索雇员信息*/
cursor cur_emp (var_job in varchar2:='SALESMAN')
is select empno,ename,sal
from emp
where job=var_job;
type record_emp is record --声明一个记录类型(RECORD类型)
(
/*定义当前记录的成员变量*/
var_empno emp.empno%type,
var_ename emp.ename%type,
var_sal emp.sal%type
);
emp_row record_emp;--声明一个record_emp类型的变量
begin
open cur_emp('MANAGER');
fetch cur_emp into emp_row;--先让指针指向结果集中的第一行
while cur_emp%found loop
dbms_output.put_line(emp_row.var_ename||'的编号是'||emp_row.var_empno||',工资是'||emp_row.var_sal);
fetch cur_emp into emp_row;--让指针指向结果集中的下一行
end loop;
close cur_emp;
end;
/
set serveroutput on
declare
var_ename varchar2(50);--声明变量,用来存储雇员名称
var_job varchar2(50);--声明变量,用来存储雇员的职务
/*声明游标,检索指定员工编号的雇员信息*/
cursor cur_emp
is select ename,job
from emp
where empno=7499;
begin
open cur_emp;--打开游标
fetch cur_emp into var_ename,var_job;--读取游标,并存储雇员名和职务
if cur_emp%found then --若检索到数据记录,则输出雇员信息
dbms_output.put_line('编号是7499的雇员名称为:'||var_ename||',职务是:'||var_job);
else
dbms_output.put_line('无数据记录');--提示无记录信息
end if;
end;
/
set serveroutput on
begin
update emp
set sal=sal*(1+0.2)
where job='SALESMAN';
if sql%notfound then
dbms_output.put_line('没有雇员需要上调工资');
else
dbms_output.put_line('有'||sql%rowcount||'个雇员工资上调20%');
end if;
end;
/
 set serveroutput on
begin
for emp_record in (select empno,ename,sal from emp where job='SALESMAN')
loop
dbms_output.put('雇员编号:'||emp_record.empno);
dbms_output.put(';雇员名称:'||emp_record.ename);
dbms_output.put_line(';雇员工资:'||emp_record.sal);
end loop;
end;
/
set serveroutput on
declare
cursor cur_emp is
select * from emp
where deptno = 30;
begin
for emp_record in cur_emp
loop
dbms_output.put('雇员编号:'||emp_record.empno);
dbms_output.put(';雇员名称:'||emp_record.ename);
dbms_output.put_line(';雇员职务:'||emp_record.job);
end loop;
end;
/
set serveroutput on
declare
var_empno number;--定义变量,存储雇员编号
var_ename varchar2(50);--定义变量,存储雇员名称
begin
select empno,ename into var_empno,var_ename
from emp
where deptno=10;--检索部门编号为10的雇员信息
if sql%found then --若检索成功,则输出雇员信息
dbms_output.put_line('雇员编号:'||var_empno||';雇员名称'||var_ename);
end if;
exception --捕获异常
when too_many_rows then --若SELECT INTO语句的返回记录超过一行
dbms_output.put_line('返回记录超过一行');
when no_data_found then --若SELECT INTO语句的返回记录为0行
dbms_output.put_line('无数据记录');
end;
/
set serveroutput on
declare
primary_iterant exception;--定义一个异常变量
pragma exception_init(primary_iterant,-00001);--关联错误号和异常变量名
begin
insert into dept values(10,'软件开发部','深圳');--向dept表中插入一条与已有主键值重复的记录,以便引发异常
exception
when primary_iterant then --若oracle捕获到的异常为-00001异常
dbms_output.put_line('主键不允许重复!');--输出异常描述信息
end;
/
set serveroutput on
declare
null_exception exception;--声明一个exception类型的异常变量
dept_row dept%rowtype;--声明rowtype类型的变量dept_row,与dept表中一行的数据类型相同
begin
dept_row.deptno := 66;--给部门编号变量赋值
dept_row.dname := '公关部';--给部门名称变量赋值
insert into dept
values(dept_row.deptno,dept_row.dname,dept_row.loc);--向dept表中插入一条记录
if dept_row.loc is null then--如果判断“loc”变量的值为null
raise null_exception;--引发null异常,程序转入exception部分
end if;
exception
when null_exception then--当raise引发的异常是null_exception时
dbms_output.put_line('loc字段的值不许为null');--输出异常提示信息
rollback;--回滚插入的数据记录
end;
/
set serveroutput on
declare
sum_i int:= 0;--定义整数变量,存储整数和
i int:= 0;--定义整数变量,存储自然数
begin
loop--循环累加自然数
i:=i+1;--得出自然数
sum_i:= sum_i+i;--计算前n个自然数的和
exit when i = 10;--当循环10次时,程序退出循环体
end loop;
dbms_output.put_line('前10个自然数的和是:'||sum_i);--计算前10个自然数的和
end;
/
set serveroutput on
begin
update emp
set sal=sal*(1+0.05)
where job='SALESMAN';
if sql%notfound then
dbms_output.put_line('没有雇员需要下调工资');
else
dbms_output.put_line('有'||sql%rowcount||'个雇员工资下调5%');
end if;
end;
/

吴裕雄--天生自然ORACLE数据库学习笔记:PL/SQL编程的更多相关文章

  1. 吴裕雄--天生自然ORACLE数据库学习笔记:SQL语言基础

    select empno,ename,sal from scott.emp; SELECT empno,ename,sal FROM scott.emp; selECT empno,ename,sal ...

  2. 吴裕雄--天生自然ORACLE数据库学习笔记:Oracle数据备份与恢复

    run{ allocate channel ch_1 device type disk format = 'd:\oraclebf\%u_%c.bak'; backup tablespace syst ...

  3. 吴裕雄--天生自然ORACLE数据库学习笔记:过程、函数、触发器和包

    create procedure pro_insertDept is begin ,'市场拓展部','JILIN'); --插入数据记录 commit; --提交数据 dbms_output.put_ ...

  4. 吴裕雄--天生自然ORACLE数据库学习笔记:Oracle 11g的闪回技术

    alter system set db_recovery_file_dest_size=4g scope=both; connect system/1qaz2wsx as sysdba; archiv ...

  5. 吴裕雄--天生自然ORACLE数据库学习笔记:数据导出与导入

    create directory dump_dir as 'd:\dump'; grant read,write on directory dump_dir to scott; --在cmd下 exp ...

  6. 吴裕雄--天生自然ORACLE数据库学习笔记:优化SQL语句

    create or replace procedure trun_table(table_deleted in varchar2) as --创建一个存储过程,传入一个表示表名称的参数,实现清空指定的 ...

  7. 吴裕雄--天生自然ORACLE数据库学习笔记:Oracle系统调优

    --修改 alter system set large_pool_size=64m; --显示 show parameter large_pool_size; select sum(getmisses ...

  8. 吴裕雄--天生自然ORACLE数据库学习笔记:用户管理与权限分配

    create user mr identified by mrsoft default tablespace users temporary tablespace temp; create user ...

  9. 吴裕雄--天生自然ORACLE数据库学习笔记:表分区与索引分区

    create table ware_retail_part --创建一个描述商品零售的数据表 ( id integer primary key,--销售编号 retail_date date,--销售 ...

随机推荐

  1. C++ 宏定义创建(销毁)单例

    Util.h: #define CREATE_SINGLETON_POINTER(CLASS,INSTANCE,MUTEX) if (NULL == INSTANCE) \ { \ MUTEX.loc ...

  2. 理解ASP.NET Core验证模型 Claim, ClaimsIdentity, ClaimsPrincipal

    Claim, ClaimsIdentity, ClaimsPrincipal: Claim:姓名:xxx,领证日期:xxx ClaimsIdentity:身份证/驾照 ClaimsPrincipal: ...

  3. 深入delphi编程理解之消息(一)WINDOWS原生窗口编写及消息处理过程

    通过以sdk方式编制windows窗口程序,对理解windows消息驱动机制和delphi消息编程有很大的帮助. sdk编制windows窗口程序的步骤: 1.对TWndClass对象进行赋值; 2. ...

  4. Web基础了解版08-JSTL-Core标签库

    JSTL JSP为我们提供了可以自定义标签库(Tag Library)的功能,用来替代代码脚本,Sun公司又定义了一套通用的标签库名为JSTL(JSP Standard Tag Library),里面 ...

  5. 洛谷P1734 最大约数和(01背包)

    题目描述 选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大. 输入格式 输入一个正整数S. 输出格式 输出最大的约数之和. 输入输出样例 输入 #1 11 输出 #1 9 说 ...

  6. 【PAT甲级】1085 Perfect Sequence (25 分)

    题意: 输入两个正整数N和P(N<=1e5,P<=1e9),接着输入N个正整数.输出一组数的最大个数使得其中最大的数不超过最小的数P倍. trick: 测试点5会爆int,因为P太大了.. ...

  7. iOS 开发之使用链式编程思想实现简单的计算器

    链式编程思想是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好.例如 a(1).b(2).c(3). 链式编程思想最为关键的是,方法的返回值是block,block必须返回对 ...

  8. disconf---分布式配置管理平台的搭建(linux版本)

    一.获取disconf的代码 地址:https://github.com/knightliao/disconf 二.搭建基础服务 ①redis,mysql,zookeeper在博主的其他博文中有相应搭 ...

  9. 通过命令创建Django项目

    本人是使用window10操作系统进行讲解Django框架,Linux系统和windows版本几乎一致,可以自行学习就可以解决. 首先在系统上创建了虚拟环境,如果不会创建,可以根据这篇文章学习:htt ...

  10. 连接mysql,oracle的命令 以及导入sql文件

    Oracle 1,sqlplus  username/password 导入: 2,@后面跟着sql文件的路径,回车,导入数据 @D:/test.sql; 导入完毕,输入commit; MySQL: ...