Oracle入门(十四)之PL/SQL

一、PL/SQL 基本语法

PL/SQL语言是模块式的过程化SQL,是oracle公司对SQL的扩展。

(1)


(2)


(3)


(5)


(6)


(7)数据类型

  • Number 数字型
  • Varchar2 变长字符型,最大32767个字符
  • Date 日期型
  • Boolean 布尔型(TRUE,FALSE,NULL三者取一)
  • Char 定长字符型,最大32767个字符
  • Int 整数型
  • Pls_integer 整数型,产生溢出时出现错误
  • Binary_integer 整数型,表示带符号的整数
  • Long 变长字符型,最长2GB


(8)标识符

 用来命名常量、变量、游标、程序和包
1)必须以字母(A-Z)开头
2)其后跟字母、数字(0-9)或特殊字符$#_
3)标识符不超过30字符
4)标识符中不包含空格
5)标识符不能为保留字

6)标识符不区分大小写

非法标识符:12_sal; first-name; sec name;


(9)变量的定义

 变量名 数据类型 [not null] [:= 值]
例1: vn_snum number;
例2: vs_name varchar2(10);
例3: vn_sid tab_server.sid%type ;   --锚定列


(10)常量定义
 常量名 constant 数据类型 [not null] :=值

 例1:vn_num constant number := 10;


(11)

(12)赋值语句: 赋值语句
 包括直接赋值和间接赋值
 直接赋值 v_num := 20000;
 间接赋值(select into、fetch into)
 select max(innum), min(innum)
 into v_max, v_min

 from tab_ingoods;


二、应用案例
编写一个匿名块程序实现:

根据一个员工姓名的本月绩效(变量初始值为10)计算并输出该员工本月收入

本月收入=基本工资(salary)+佣金百分比(COMMISSION_PCT)*绩效

set serveroutput on --dbms_output 输出有效,用在sql developer
declare
 v_b number:=10; --初始值
 v_lastname varchar2(10):=‘XXX';
 -- v_firstname employees.first_name%type; --锚定变量
 v_salary number(6,2);
begin
 select nvl(salary,0)+nvl(COMMISSION_PCT,0)*v_b
 into v_salary --间接赋值
 from employees where last_name=v_lastname;
 dbms_output.put_line(v_lastname||'本月的工资为:'||v_salary);
end;


三、PL/SQL 基本结构

(1)条件控制语句 

declare
 theGrade number:= 88;
begin
 if theGrade>=90 then
 dbms_output.put_line('杰出');
 elsif theGrade>=80 then
 dbms_output.put_line('优秀');
 elsif theGrade>=60 then
 dbms_output.put_line('合格');
 else
 dbms_output.put_line('不及格');
 end if;
end; 

(2)循环

简单循环

set serveroutput on;
declare
 i number(8):=5;
begin
 <<first_loop>>
 loop
 dbms_output.put_line('i = '||i);
 i:= i-1;
 exit first_loop when i = 0;
 end loop;
 dbms_output.put_line('LOOP循环已经结束!');
end;
For循环

beginFor循环
 for i in -3..3 loop
 dbms_output.put_line('i = '||i);
 end loop;
 dbms_output.put_line('FOR循环已经结束!');
end;
While循环

declare
 i number(8):=5;
While循环
begin
 while(i > 0) loop
 dbms_output.put_line('i = '||i);
 i:=i-1;
 end loop while_loop;
 dbms_output.put_line('WHILE循环已经结束!');
end;

Case语句

set serveroutput Case语句on
declare
 gender varchar2(20):= '男';
begin
 case gender
 when '男' then dbms_output.put_line('勇敢');
 when '女' then dbms_output.put_line('漂亮');
 else dbms_output.put_line('人妖');
 end case;
end; 

Goto语句 

DECLARE
 i number;
BEGIN
 i:=5;
 <<repeat_loop>> --循环点
 DBMS_OUTPUT.PUT_LINE('i='||i);
 i:=i-1;
 IF i>0 THEN
 GOTO repeat_loop; --小于5,就goto到repeat_loop
 END IF;
END;

注:Oracle入门(十四A)之PL/SQL 基本结构


四、异常处理

DECLARE 
 v_empno employees.employee_id%TYPE:= &empno;
 v_sal employees.salary%TYPE;
BEGIN
 SELECT salary INTO v_sal FROM employees
 WHERE employee_id = v_empno;
 IF v_sal<=15000 THEN
 dbms_output.put_line('编码为'||v_empno||'员工该加100元!');
 ELSE
 dbms_output.put_line('编码为'||v_empno||'员工工资已经超过规定值!');
 END IF;
EXCEPTION
 WHEN NO_DATA_FOUND THEN
   dbms_output.put_line('数据库中没有编码为'||v_empno||'的员工');
 WHEN TOO_MANY_ROWS THEN
   dbms_output.put_line('程序运行错误!请使用游标');
 WHEN OTHERS THEN
   dbms_output.put_line(SQLCODE||'---'||SQLERRM);
END;

注:Oracle入门(十四B)之PL/SQL异常处理



谢谢大家的支持,我会陆续上传相关电子书 由于体积较大,本书分两卷压缩,请都下载完再解压! Oracle 11g SQLPL SQL入门到精通 pdf格式电子书 下载(一) http://download.csdn.net/source/3268267 Oracle 11g SQLPL SQL入门到精通 pdf格式电子书 下载(二) http://download.csdn.net/source/3268312 内容简介   本书是专门为oracle应用开发人员提供的sqlpl/sql编程指南。通过学习本书,读者不仅可以掌握oracle常用工具oracle universal installer、net comfiguration assistant、sql developer、sql*plus的作用及使用方法,而且可以掌握sql语句和pl/sql的各种基础知识和高级特征(记录类型、集合类型、对象类型、大对象类型)。   除了为读者提供编写sql语句和开发pl/sql块的方法外,本书还为应用开发人员提供了一些常用的pl/sql系统包。通过使用这些pl/sql系统包,应用开发人员可以开发出功能更强大的数据库应用程序。本书不仅适合sqlpl/sql初学者,也适合于有经验的oracle应用开发人员。 前言 第一部分 sqlpl/sql相关工具  第1章 在windows 平台上安装oracle database 11g  第2章 配置网络服务名  第3章 使用sql database  第4章 使用sql*plus 第二部分 sql  第5章 sqlpl/sql综述  第6章 简单查询  第7章 sql单行函数  第8章 操纵数据  第9章 复杂查询  第10章 管理常用对象 第三部分 pl/sql  第11章 pl/sql基础  第12章 访问oracle  第13章 编写控制结构  第14章 使用复合数据类型  第15章 使用游标  第16章 异常处理 . 第17章 本地动态sql  第18章 pl/sql过程  第19章 pl/sql函数  第20章 pl/sql包  第21章 触发器  第22章 使用对象类型 第四部分 pl/sql系统包  第23章 使用大对象  第24章 读写os文件  第25章 开发多媒体应用  第26章 开发web应用  第27章 dbms_sq动态sql  第28章 管理统计  第29章 使用数据库资源管理器  第30章 数据加密和解密  第31章 使用调度程序  第32章 使用flashback  第33章 使用重定义联机表  第34章 修正损坏块  第35章 使用日里民挖掘  第36章 使用管道  第37章 使用精细访问控制  第38章 使用精细审计  第39章 使用预警事件  第40章 转换rowid  第41章 其他常用包 习题答案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值