PL/SQL过程式的语言

PL/SQL 编程
全称:Procedural Language(过程式的语言) /Structured Query Language(结构化查询语言)

/简介:PL/SQL Developer是一个集成开发环境,专门开发面向Oracle数据库的应用。
PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。
PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,
所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,
通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL 只有 Oracle 数据库有。
MySQL 目前不支持 PL/SQL 的,但支持Navicat Premium。
/

 PL/SQL 格式:
        declare 
             变量的声明
        begin
             主体逻辑 
        exception
             异常的处理 
        end;

1.变量的声明

v_xxxx 变量类型 ; (变量名 尽量加 v_ 前缀, 避免与后续出现的字段名 和表名 混淆 )

变量 := 值 ; 为 变量赋值 , 区分于 where 子句中的 比较 等号

2.begin 块的编写

在查询 中 为 变量 赋值 , 将查询结果 赋值给 声明过的 变量

语法: select 字段名 into 变量名

  或者  select  字段1,字段2,...  into  变量1,变量2,... 
  
  注意: 一个普通变量 只能存储一个值
  1. 输出语句

DBMS_OUTPUT.PUT_LINE(输出内容);

(DBMS : DataBase Management System)

4.变量类型

为了 使变量 能够 正常地盛放 查询结果数据, 变量类型 和长度 最好与 相应的 字段 一致

%TYPE : 可以 直接 根据 表结构 中的 字段类型 , 来 自动隐式 设定 所声明变量的 具体数据类型和长度

 该写法 可以保证 所声明变量的类型 与 对应的 字段 类型 100% 吻合 , 程序 安全性更高 

具体用法: 变量名 表名.要参照的字段%type ; 参照表的某个字段类型 来设定变量类型OWTYPE : 可以用来定义 行变量, 其类型 参照 某个表的 所有 字段类型

         该类型的变量 可以 存储 一整条记录 

    具体用法 :  变量名  表名%ROWTYPE ;

               获取 其中各个字段值的方法:  行变量.字段名 

	优势: 避免了 过多地定义普通变量, 用以接受 查询结果中的 各个字段值 

record : 通过 声明 记录类型, 可以 将多个 变量 自由组合 到一个记录类型中

       record 类型 的变量 相当于一个 复合类型的复杂变量,内层又包含多个变量值 
	   
	   相比 ROWTYPE 更灵活 

table(索引表) : 可以存放 多列 多行 结果

      用法:  type  自定义名称  is  table  of  表名%rowtype  index by binary_integer; 
      select *   
      from emp;             --查询数据库中的 emp表

– 编写一个简单的 PL/SQL
– 根据员工 编号, 查询 员工姓

 declare
    v_empno number(8):=7788;     -- 声明变量,存储员工编号
    v_ename varchar2(20);        -- 声明变量,存储 员工姓名
 begin
    select ename into v_ename -- 将查询到的 员工姓名 存入 变量 v_ename 中
    from emp
    where empno = v_empno;
 dbms_output.put_line(v_ename);  -- 输出变量v_ename 的值
 -- DBMS 数据库管理系统 (Data Base Management System)
 end;-- 结束语句

– %type 的 使用
– 根据员工编号, 查询 员工 姓名

  declare 
     v_empno emp.empno%type :=7788; -- 声明变量v_empno,用来存储员工编号(已知)
     v_ename emp.ename%type; --声明变量v_ename,用来存储 员工姓名(未知)
  begin
    select ename into v_ename  -- 将查询到的 ename结果 赋值 给(into) 变量v_ename
    from emp          --在表 emp 中 查询
    where empno= v_empno;    -- 当 表内的 员工编号 与 声明的员工编号 变量 值 相等时    
  DBMS_output.put_line(v_ename||','||v_empno);
  end;
-- 根据员工编号, 查询 员工 姓名
 
 --     %rowtype 的 使用 
 declare
    v_empno emp.empno%type := 7788; -- 声明 一个变量 v_empno用来存放 编号
    v_emp   emp%rowtype;    -- 声明一个表v_emp 
 begin
   select * into v_emp   -- 将查询到的结果集 赋予 表 v_emp
   from emp
   where empno=v_empno; -- 当 emp表中的 empno 和声明的v_empno 相等时
   dbms_output.put_line('员工编号:'||v_emp.empno||'员工姓名:'||v_emp.ename);
   
   end;

– record 的 使用 (record vt.记录)

-- 查询 emp 中的 所有 字段
 declare
    type emp_record is record( -- 声明 一个记录类型 
    ename emp.ename%type,  
     job  emp.job%type,          --??????
     sal  emp.sal%type
    );
    v_empno emp.empno%type :=7788;  -- 声明变量 用来存储 员工编号
    v_emp_record emp_record;  -- v_emp_record 作为 行变量,用来存储一整条记录
 begin
    select ename,job,sal into v_emp_record -- 将查询到的员工姓名 存入 v_emp_record
    from emp
    where empno = v_empno;--当 emp表中的 empno 与变量 v_empno 相等时
 dbms_output.put_line(v_emp_record.ename);
 end;

– table (索引表)

 -- 查询 emp 中的 所有字段
 declare
    type emp_table is table of emp%rowtype  --声明索引表的 类型(在PL/SQL中将一个记录声明为具有相同类型的数据库行)
    index by binary_integer;  --指定索引 (自加)为整数索引    --binary_integer(二进制 的 整数 )
    v_emp_table emp_table;   --为变量v_emp_table 指定 类型 
 begin
   select * into v_emp_table(0) -- 将查询到的 ename结果集 赋予 v_emp_table(0)--索引为0的索引表中
   from emp
   where empno=7788; 
   select * into v_emp_table(1) -- 将查询到的 ename结果集 赋予 v_emp_table(0)--索引为1的索引表中
   from emp
   where empno=7369; 
 dbms_output.put_line('员工姓名:'||v_emp_table(0).ename);  --输出 语句   oracle中的连接符是'||'
 dbms_output.put_line('员工姓名:'||v_emp_table(1).ename);
 end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值