Oracle之用PL/SQL编程(定义、块的五种分类、DML结果收参(insert操作、update操作、delete操作)、流程控制(If语句、Case语句、loop语句、while语句、for语句

Oracle之使用PL/SQL编程(定义、块的五种分类、常规变量、列类型和行类型、DML结果收参练习(insert操作、update操作、delete操作)、异常处理、流程控制练习(If语句、Case语句、loop语句、while语句、for语句))

1. PL/SQL编程的定义

PL/SQL是Oracle在标准SQL语言上的过程性扩展,允许嵌入SQL语句,定义变量和常量允许过程语言结构(条件分支语句和循环语句)允许使用异常来处理Oracle错误 可以用于创建存储过程、触发器和程序包等,也可以用于处理业务 规则、数据库事件或给SQL命令的执行添加程序逻辑

2. 块的分类(五种)
  1. 无名块或匿名块(anonymous):动态构造,只能执行一次,可调用其它程序,但不能被其它程序调用。
  2. 命名块(named):是带有名称的匿名块,这个名称就是标签。
  3. 子程序(subprogram):存储在数据库中的存储过程、函数等。当在数据库上建立好后可以在其它程序中调用它们。
  4. 触发器(Trigger):当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。
  5. 程序包/包(package):存储在数据库中的一组子程序、变量定义。在包中的子程序可以被其它程序包或子程序调用。但如果声明的是局部子程序,则只能在定义该局部子程序的块中调用该局部子程序。
3. 常规变量,常量练习
-- CONSTANT 定义常量值
declare
     v_number1 number :=13;
     v_number2 constant number :=3.14;
begin
     dbms_output.put_line(v_number1 * v_number2);
end;

-- DML结果装载入PLSQL变量
declare
  v_salary employees.salary%type;
begin
  select salary into v_salary from employees where employee_id=198;
  DBMS_OUTPUT.put_line('v_salary:'||v_salary);
end;
4. 列类型和行类型练习
-- 变量与指定的列的类型一致 采用%TYPE
DECLARE  
  v_num1 employees.salary%type  := 13.234;
  v_num2 employees.manager_id%type := 2;
BEGIN
  DBMS_OUTPUT.put_line(v_num1 / v_num2);
END;

-- %ROWTYPE表示数据类型是一行数据
DECLARE
  v_emp employees%rowtype;
BEGIN
  select * into v_emp from employees where employee_id = 100;
  dbms_output.put_line('部门编号:'||v_emp.department_id ||
                       ' 员工姓名:'|| v_emp.first_name);
END;
5. DML结果收参练习(insert操作、update操作、delete操作)
--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

    returning department_id,department_name || ' '|| manager_id

    into v_depId,v_info;
    dbms_output.put_line(v_depId || ' '||' '|| v_info);
END;
6. 通过用户输入的员工号,查询一行记录,添加异常处理
--通过用户输入的员工号,查询一行记录
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);
--异常处理
EXCEPTION
    WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE('未找到该员工');
END;
7. 流程控制练习(If语句、Case语句、loop语句、while语句、for语句)
-- If语句格式
IF <布尔表达式> THEN 
  PL/SQLSQL语句 
ELSE 
  其它语句 
END IF;


-- if示例
declare
    v_temp number :='&input_temp';
begin 
    if v_temp >37 then 
      dbms_output.put_line('进行隔离');
    else
      dbms_output.put_line('自行观察'); 
    end if;
end;
-- Case语句格式
CASE 条件表达式 
WHEN 条件表达式结果1 THEN 
     语句段1 
WHEN 条件表达式结果2 THEN 
     语句段2 
  ...... 
WHEN 条件表达式结果n THEN 
     语句段n 
[ELSE 条件表达式结果] 
END;

-- Case示例
declare 
     v_score number :='&input_score';
     v_result varchar2(32);
begin
     v_result :=
     case
       when v_score<100 and v_score>90 then '优秀'
       when v_score between 81 and 90 then '良好'
       when v_score between 60 and 80 then '及格'
       else'数据异常'
      end;
      dbms_output.put_line(v_result);
end;
三种循环方法
-- loop语句格式
LOOP
      要执行的语句; 
EXIT WHEN <条件语句>; --条件满足,退出循环语句 
END LOOP;

--loop示例
DECLARE
   v_num number := 1;
BEGIN
   loop
     DBMS_OUTPUT.put_line('当前num值:' || v_num);
     v_num := v_num+1;
   exit when v_num = 10;
   end loop;
END;
-- while语句格式
WHILE <布尔表达式> LOOP 
    要执行的语句; 
END LOOP;

-- while示例
DECLARE
  v_num number := 1;
BEGIN
  while v_num < 10 loop
    DBMS_OUTPUT.PUT_LINE('当前v_num值:'|| v_num);
    v_num :=v_num+1;
end loop;
END;
-- for语句格式 (推荐)
FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP 
  要执行的语句; 
END LOOP ;

IN 每次循环加一;
IN REVERSE 每次循环减一;
EXIT 退出循环;

--for 推荐示例
DECLARE

BEGIN
  for i in 1..101 loop
    DBMS_OUTPUT.put_line('当前值:'|| i);
  end loop;
END;


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 loop;
END;
8. 数组的输出采用for循环方式,打印出来
-- 数组 数组的输出采用for循环方式,打印出来
declare
   --定义一个数组
   type type_array is array(3) of varchar2(32);
   --指定一个变量为数组
   v_type_array type_array;
begin
  --数组赋值
  v_type_array := type_array('China','American','England');
  --数组打印
  for i in 1 .. v_type_array.count loop
    dbms_output.put_line(v_type_array(i));
  end loop;
end;    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学好Oracle的六条总结 1、如果有一定的数据库基础,知道SQL是怎么回事,即使写不出来简单的SQL, 但可以看懂它们,你就可以跳到2。否则请先学习一下数据库基础和SQL语言, 不需要很深,更不需要去记忆那些复杂的SQL命令,这些可以留在以后边应用 边学习、记忆。2 、要想学好ORACLE,首先要学习ORACLE的体系结构,现在你不需要深入 理解它们,但要分清几个关键的概念: instance (实例)、数据文件、日志文件、参数文件、数据文件与表空间的关系 3、2是有关ORACLE的一些基本概念,下面要学习的是一些简单的的实际操作 ,就是如何去管理ORACLE数据库,当然不是管理全部的ORACLE。在此过程 你将对SQLORACLE体系结构有个更深入的了解。 4、到了这一步你基本上算是初步掌握了ORACLE,下面将要根据你的方向来具 体学习其它的ORACLE知识了。如果你是开发人员,则需要更多地去学习 PL/SQL以及DEVELOPER,而这将是一门新的课程。如果你是一名DBA, 请继续。 5、可以根据自己的实际情况,进行有选择的学习,也就是说下面的内 没有特别顺序要求。可以选择深入学习ORACLE的管理、备份与恢复、性能 调整、网络等。当然在学习这些知识的过程,如果有实际的工作更好,这样 可以在实际成长,学会TROUBLE SHOOTING 目录 1.1 数据库基本知识 1.2 关系数据库 1.3 数据库设计基础 1.4 SQL基本命令 1.5 Oracle简介 1.6 启动和关闭Oracle 1.7 Oracle 命令复习
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值