Oracle数据库 PL/SQL 入门

简介: Oracle数据库 PL/SQL 入门

网络异常,图片无法展示
|


思维导图


1. PL/SQL简介


a. PL/SQL是对SQL的一个增强,使SQL具有过程化的处理能力,就是在SQL能使用分支、循环等语句;


b. PL/SQL是操作oracle数据库最快的语言;


c. PL/SQL是存储过程、存储函数和触发器基础;


PL/SQL的程序结构:

declare 
     说明部分(变量说明,光标申明,例外说明)
begin
     语句序列(程序体 DML语句)
exception
     例外处理语句
end;
/


说明部分:


定义基本变量:char,varchar2,date,number,boolean,long

--变量声明:
    var1 char(15);
    married boolean:=true;
    psal number(7,2);
    --引用变量:
    pename  emp.ename%type;


2. PL/SQL入门案例


小案例: 打印helloworld

--打开服务器的输出功能
set serveroutput on
declare
  --声明区:声明变量、游标、例外
begin
  --程序区:
  --打印helloworld
  --dbms_output:程序包,类似于java中类
  --put_line:存储过程,类似于java中的方法
  dbms_output.put_line('HelloWorld!');
end;
/

--查看程序包结构
desc dbms_output


3. 引用型变量


小案例: 查询并打印7839号员工的姓名和工资

--打开服务器的输出功能
set serveroutput on
declare
  --声明引用型变量
  pename   emp.ename%type;
  psal     emp.sal%type;
begin
  --查询7839号员工的姓名和工资
  --可以使用into关键字赋值
  select ename, sal into pename,psal from emp where empno=7839;
  --打印
  dbms_output.put_line(pename||'的薪水是'||psal);
end;
/


4. 记录型变量


记录型变量,就像是将查询结果封装到了一个对象里面一样,他就是这个对象。通过(.)可以取出对中的值。


小案例: 查询并打印7839号员工的姓名和工资

set serveroutput on
declare
  --声明记录型变量
  pemp  emp%rowtype;
begin
  select * into pemp from emp where empno=7839;
  --打印
  --从记录型变量中获取数据:记录型变量名.列名
  dbms_output.put_line(pemp.ename||'的薪水是'||pemp.sal);
end;
/


5. 判断语句:if语句


温馨小提示:


(1)set serveroutput onaccept num prompt '请您输入数字:'之后均无需带分号;


(2)accept num prompt '请您输入数字:'运行完这条语句之后,就会弹出来让你输入的提示内容,不要担心,照常输入。之后,接着上面的步骤,往下走。输入的内容已经被绑定到了指定的变量中了。


小案例: 判断用户输入的数字

set serveroutput on
--accept:从标准输入获取一个数据,保存num地址变量指定位置
--prompt:自定义提示信息
--num:地址值,含义量;在该地址上保存了输入的值
accept num prompt '请您输入数字:'
declare
  pnum  number;
begin
  --获取用户输入,赋值给pnum变量
  pnum:=#
  if pnum=1 then
    dbms_output.put_line('您输入的数字是:1!');
  elsif pnum=2 then
    dbms_output.put_line('您输入的数字是:2!');
  else
    dbms_output.put_line('您输入的数字是:其他!');
  end if;
end;
/


6. 循环语句(也有很多种,但是下面这一种是最常用的)


(1) 循环打印1~10(最常用的方式):

set serveroutput on
declare
  pnum  number:=1;
begin
  loop
    exit when pnum > 10;
    dbms_output.put_line(pnum);
    pnum:=pnum+1;
  end loop;
end;
/


(2) 使用while循环打印数字1-10

declare
 --定义循环变量
 pnum number:=1;
begin
 while pnum<=10 loop
  --循环体
  dbms_output.put_line(pnum);
  --使该变量+1
  pnum:=pnum+1;
 end loop;
end;
/


(3) 使用for循环打印1-10

set serveroutput on
declare
 --定义循环变量
 pnum number:=1;
begin
 --注意:此处的数字必须是连续的
 for pnum in 1..10 loop
  --循环体
  dbms_output.put_line(pnum);
 end loop;
end;
/


7. 游标(也叫光标,就是一个结果集)


(1) 光标的语法

cursor 光标名 [(参数名 数据类型[,参数名 数据类型]...)]
is select 语句;


操作光标:

--打开光标:
open c1;(打开光标执行查询)
--关闭光标: 
close c1;(关闭游标释放资源)
--取一行光标的值: 
fetch c1 into pename;(取一行到变量中)


注意事项:

  • 光标数的限制:默认情况下,oracle数据库只允许在同一个会话中,打开300个光标;
  • 修改默认值:

--切换到管理员
show user
conn sys/password@192.168.56.6:1521/orcl as sysdba
show user
--模糊查找
show parameter cursor
--修改光标数的限制
--scope的取值:both,memory,spfile(数据库需要重启)
alter system set open_cursor=400 scope=both;


(2) 无参游标
小案例: 查询并打印所有员工姓名和薪水

set serveroutput on
declare
  --定义游标
  cursor cemp is select ename, sal from emp;
  pename emp.ename%type;
  psal   emp.sal%type;
begin
  --打开游标
  open cemp;
    --循环获取游标中数据
    loop
      fetch cemp into pename,psal;
      --游标状态:%isopen:是否打开;%rowcount:返回行数;%found:获取到数据;%notfound获取不到数据
      exit when cemp%notfound;
      --打印
      dbms_output.put_line(pename||'的薪水是'||psal);
    end loop;
  --关闭游标
  close cemp;
end;
/


(3) 带参游标
小案例1: 查询并打印10号部门员工的姓名和薪水

set serveroutput on
declare
  --定义带参数的游标
  cursor cemp(pdeptno emp.deptno%type) is select ename,sal from emp where deptno=pdeptno;
  pename emp.ename%type;
  psal   emp.sal%type;
begin
  --作业:动态打印部门员工的信息
  open cemp(10);
    --循环获取游标中数据
    loop
      fetch cemp into pename,psal;
      --游标状态:%isopen:是否打开;%rowcount:返回行数;%found:获取到数据;%notfound获取不到数据
      exit when cemp%notfound;
      --打印
      dbms_output.put_line(pename||'的薪水是'||psal);
    end loop;
  close cemp;
end;
/


小案例2: 根据职位涨工资:按员工的工种涨工资,总裁1000元,经理800元,其他人400元

declare
  cursor cemp is select empno,job,sal from emp;
  pempno  emp.empno%type;
  pjob    emp.job%type;
  psal    emp.sal%type;
begin
  open cemp;
    loop
      fetch cemp into pempno,pjob,psal;
      exit when cemp%notfound;
      if pjob='PRESIDENT' then
        update emp set sal=psal+1000 where empno=pempno;
      elsif pjob='MANAGER' then
        update emp set sal=psal+800 where empno=pempno;
      else
        update emp set sal=psal+400 where empno=pempno;
      end if;
    end loop;
  close cemp;
  --提交数据
  commit;
end;
/


相关文章
|
18天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
133 64
|
8天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
19 7
|
8天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
13 6
|
8天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
13 5
|
8天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
12 2
|
15天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
17天前
|
监控 Oracle 关系型数据库
Oracle数据库性能优化
【10月更文挑战第16天】Oracle数据库性能优化是
15 1
|
15天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
24天前
|
存储 Oracle 关系型数据库
【数据库-Oracle】《Oracle 数据库探秘:基础知识点全攻略》
《Oracle 数据库探秘:基础知识点全攻略》深入介绍 Oracle 数据库的基础知识点,包括数据类型、表结构、查询语句等。通过详细讲解、代码示例和流程图,帮助读者快速掌握 Oracle 数据库的基本操作,为数据库开发和管理打下坚实基础。
27 0
|
SQL 关系型数据库 MySQL
sql入门基础
好用的mysql客户端 https://www.quora.com/What-is-the-best-free-DB-schema-design-tool https://www.quora.com/What-is-the-best-MySQL-client-for-Mac-OS-X-or-Windows MySql string 函数 http://dev.
639 0

推荐镜像

更多