Oracle数据库PLSQL学习

@[TOC]Oracle数据库PLSQL学习
PLSQL数据库的学习
PLSQL是什么

  • 是专用于Oracle服务器,在SQL基础之上,添加了一些过程化控制语句,叫PLSQL
  • 过程化包括:类型定义,判断,循环,游标,异常或例外处理

PLSQL语法
declare和exception都是可以省略的,'begin和end;'不能省略
[declare]
变量声明;
变量声明;
begin
DML/TCL操作;
DML/TCL操作;
[exception]
例外处理;
例外处理;
end;

在PLSQL程序中: ‘;’号表示每条语句的结束;‘ / ’表示整个PLSQL程序的结束
PLSQL与SQL执行有什么不同·:

  1. SQL是单条执行
  2. PLSQL是整体执行,不能单条执行,整个PLSQL结束用“ / ”,其中每条语句结束用‘;’号

PLSQL变量
既然PLSQL是注重过程的,那么写的过程的程序就肯定有基本的语法,首先是变量:
PLSQL变量有四种

  1. number i number(2);
  2. varchar2 my varchar2:=‘基于’;
  3. 与列名类型相同%type me emp.ename%type;
  4. 与整个表的列类型相同%rowtype id emp%rowtype;
    注意
    PLSQL程序的执行结果,默认情况下,不显示PLSQL程序的执行结果,语法:set serveroutput on/off;
  5. 声明变量时,必须指定类型
  6. 变量名需要先赋值,后使用
  7. 变量名没有默认值(表现是空,无意义)

例题:
1、 使用基本类型变量,常量和注释,求10+100的和
declare
–定义变量
mysum number(3) :=0;
tip varchar2(10) :=‘结果是’;
begin
–业务算法
mysum :=10+100;
–输出到控制器
dbms_output.put_line(tip || mysum);
end;
2、输出7369号员工姓名和工资,格式如下:7369号员工的姓名是SMINTH,语法:使用表名.字段%type
declare
–定义两个变量,分别装姓名和工资
pname emp.ename%type;
psal emp.sal%type;
begin
–spl语句
–select ename,sal from emp where empno=7369;
–PLQSL语句,将ename,sal的值放入到pename,psal中
select enmae,sal into pename,psal from where empno=7369;
–输出
dbms_output.put_line(‘7369号员工的姓名是’ || pename|| ‘,薪水是’ || psal);
end;
3、输出7788号员工姓名和工资,格式如下:7369号员工的姓名是SMITH,薪水是3000,语法:使用表名%rowtype;
declare
emp_record emp%rowtype;
begin
select * into emp_record from emp where empno=7788;
dbms_output.put_line(‘7788号员工的是’ ||emp_record.ename || ‘,薪水是’ || emp_record.sal);
end;
何时使用%type,何时i使用%rowtype;
8. 当定义变量时t,该变量的类型与表中某字段的类型相同时,可以使用%type
9. 当定义量时,该变量与整个表结构完全相同时,可以使用%rowtype,此时通过变量名.字段名,可以取值变量中对应的值
10. 项目中常用%type
insert操作,接受返回值
declare
v_depId departments.department_id%type;
v_depName departments.department_name%type;
v_managerId departments.manager_id%type;
begin
insert into departments(department_id,department_name,manager_id,location_id) values(600,’‘shanghai,200,1700)
–接收返回值
returning department_id,department_name,manager_id
–装载变量,要和返回值的数量保持一致
into v_depId,v_depName,v_managerId;
dbms_output.put_line(v_depId || ‘ ’ || ‘ ’v_depName || ’ ’ || v_managerId);
end;
update操作,接收返回值
declare
v_depId departments.department_id%type;
v_info varchar2(40);
begin
update departments set department_name=‘北京’ where department_id=600
–接收返回值
returning department_id,department_name || ’ ’ || manager_id
–装载变量,要和返回值的数量保持一致
into v_depId,v_info;
dbms_output.put_line(v_depId || ’ ’ || ’ ’ || v_info);
end;
delete操作,接收返回值
declare
v_depId departments.department_id%type;
v_info varchar2(40);
begin
delete from departments where department_id=600
–接收返回值
ruturning department_id,department_name || ’ ’ || manager_id
–装载变量,要和返回值数量保持一致
dbms_output.put_line(v_depId || ’ ’ || ’ ’ || v_info);
end;
数组类型
declare
–定义一个数组
type type_array id array(3) of varchar(32);
–赋值一个变量为数组
v_type_array type_array;
begin
–变量赋值
v_type_array:=type_array(‘China’,‘Japan’,‘England’);
–输出
dbms_output.put_line(v_type_array(1)|| ’ ’ ||v_type_array(2)|| ’ ’ || v_type_array(3));
end;
异常处理EXCEPTION
declare
v_input_empNum number:=’&input_empNum’;
v_emp employees%rowtype;
begin
select * into v_emp from employees where employee_id=v_input_empNum;
dbms_output.put_line(v_input_empNum);
dbms_output.put_line(v_emp.first_name);
execption
when NO_DATA_FOUND then
dbms_output.i(‘未找到该员工’);
end;
判断体
11. IF 条件 THEN
PL/SQL和SQL语句;
END IF;

  1. IF 条件 THEN
    PL/SQL和SQL语句;
    ELSE
    PL/SQL和SQL语句;
    END IF;

  2. IF 条件 THEN
    PL/SQL和SQL语句;
    ELSIF 条件 THEN
    PL/SQL和SQL语句;
    ELSE
    PL/SQL和SQL语句;
    case
    CASE 条件表达式
    WHEN 条件表达式结果1 THEN
    语句段1
    WHEN 条件表达式结果2 THEN
    语句段2

    WHEN 条件表达式结果n THEN
    语句段n
    ELSE 条件表达式结果
    END;
    LOOP 三种循环方法
    LOOP
    要执行的语句;
    EXIT WHEN<条件语句>;–条件满足,退出循环语句
    END LOOP;
    例题
    declare
    v_num number :=1;
    loop
    dbms_output.put_line(‘当前num值:’ || v_num);
    v_num :=v_num+1;
    exit when v_num=10;
    end loop;
    end;
    WHILE
    WHILE <布尔表达式> LOOP
    PL/SQL和SQL语句;
    END LOOP;
    例题
    declare
    v_num number:=1;
    begin
    while v_num<10 loop
    dbms_output.put_line(‘当前值为:’ || v_num);
    v_num:=v_num+1;
    end;
    FOR
    FOR 循环计数器 IN [REVERSE] 下限 … 上限 LOOP
    PL/SQL和SQL语句;
    END LOOP;

IN每次循环加一;
IN REVERSE 每次循环减一;
EXIT 退出循环;
循环的递增只能是1,不能自定义步长
例题
declare
begin
for i in reverse 1 … 10 loop
if i=5 then
dbms_output.put_line(‘退出循环’);
exit;
end if;
dbms_output.put_line(‘当前值:’ || i);
end;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值