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异常处理



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值