PLSQL 编程基础

PLSQL编程基础
声明:文章转自新浪”qixianchuan的博客”
原文地址:http://blog.sina.com.cn/s/blog_bd338b210101ajsj.html

1、了解SQL和PLSQL

SQL(Structured Query Language):一种结构化查询语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。简单理解为平时说的“增删改查”等等(不严谨)
PLSQL(Procedural Language/SQL):一种过程化SQL语言,是面向过程的。在SQL的基础上进行编程,增加了变量处理、语句的运行控制(begin…end)、Exception等功能。
注:oracle 叫 plsql,db2叫sqlpl… 叫法不一样。此文章针对oracle的plsql。

2、plsql结构组成

PL/SQL程序由块结构组成,每一个块都包含有PL/SQL和SQL语句。
块的结构如下:

    [DECLARE 
        --  程序的声明部分,例如,定义变量   ①
    ]
    BEGIN 
        --  程序的执行体,具体的操作代码   ②
    [EXCEPTION 
        --  异常的处理   ③
    ]
    END ;

3、变量

变量在DECLARE块中声明。变量声明同时包含名称和类型。
变量的分类(按存值多少分):

  • 简单变量:也叫单值变量
    声明语法:变量名 [CONSTANT] 数据类型 [NOT NULL] [:=默认值];
    例:v_date date := sysdate;
  • 复合变量:可以存放多个值。
    声明语法:
    a.定义复合类型:TYPE 复合类型名 IS TABLE OF 数据类型 INDEX BY BINARY_INTEGER;
    b.变量名 复合类型名;
    例:type type_table_emp_empno is table of emp.empno%type index by binary_integer;
    v_empnos type_table_emp_empno;

4、语句

4.1 条件语句

   IF 布尔表达式1 THEN
        语句块1
   ELSIF 布尔表达式2 THEN
         语句块2
   ELSE
          语句块3
    END IF;

4.2 循环语句
4.2.1 loop 循环

    LOOP
        语句块
         EXIT WHEN 退出条件;
         更改条件;
    END LOOP;

4.2.2 while 循环

    WHILE 循环条件表达式 LOOP
     语句块
    END LOOP;

4.2.3 for 循环

    FOR 循环变量 IN [REVERSE] 循环下限.. 循环上限 LOOP
        语句块
    END LOOP;

5、游标

游标(CURSOR)是ORACLE系统在内存中开辟的一个工作区,在其中存放SELECT语句返回的查询集。在游标所定义的工作区中,存在着一个指针(POINTER),在初始状态它指向查询结果的首记录。当指针放置到某行后,即可对该行数据进行操作。
5.1 使用游标时的5个步骤
a.声明游标,并指定查询
b.声明一些变量,用来保存记录的列值
c.打开游标
d.一次从游标中获取一个记录。
e.关闭游标
5.2 游标的4个属性
%ISOPEN:是否打开
%ROWCOUNT:行数
%FOUND:boolean值,是否还有数据
%NOTFOUND:是否已无数据

例子

例1

--打开serveroutput,可以查看运行结果
set serveroutput on;

declare
  --基本类型变量声明①
  p_name varchar2(20) := 'HelloWord';
  p_date date := sysdate;
  --引用类型变量声明②
  p_chnname sac_channel_param.chn_name%type;
  p_banknodecode sac_channel_param.bank_node_code%type;
  --记录类型变量声明③
  p_row sac_channel_param%rowtype;
  --记录类型变量声明2④
  type p_channel_record is record(
       p_name sac_channel_param.chn_name%type,
       p_code sac_channel_param.bank_node_code%type
  );
  p_channel p_channel_record;
  --表类型变量声明⑤
  type p_chn_table is table of
       sac_channel_param%rowtype
   index by binary_integer;    --指索引组织类型 
  p_chn p_chn_table;

begin
  --打印基本类型变量值①
  dbms_output.put_line(p_name);
  dbms_output.put_line(p_date);
  --打印引用类型变量值②
  select chn_name,bank_node_code into p_chnname,p_banknodecode from sac_channel_param where id=12345678;
  dbms_output.put_line(p_chnname||'的银行节点是'||p_banknodecode);
  --打印记录类型变量值③
  select * into p_row from sac_channel_param where id=12345678;
  dbms_output.put_line(p_row.chn_name||'的银行节点是'||p_row.bank_node_code); 
  --打印记录类型变量值④
  select chn_name,bank_node_code into p_channel from sac_channel_param where id=12345678;
  dbms_output.put_line(p_channel.p_name||'的银行节点是'||p_channel.p_code); 
  --打印表类型变量值⑤
  select * bulk collect into p_chn from sac_channel_param where id=12345678; 
  --BULK COLLECT INTO  指是一个成批聚合类型,简单的来说,它可以存储一个多行多列存储类型 
  dbms_output.put_line(p_chn(1).chn_name||'的银行节点是'||p_chn(1).bank_node_code); 
end;
/

例2

--例子包含 游标(不带参数)、选择语句、循环语句
set serveroutput on
declare
   cursor aa is select * from sac_channel_param;--声明游标
   p_chn sac_channel_param%rowtype; --声明变量
begin
   open aa;  --打开游标
   loop --循环
     fetch aa into p_chn;--取一条值
     exit when aa%notfound; --退出循环条件
          if mod(aa%rowcount,2)=0 then
              dbms_output.put_line(p_chn.chn_name||'的银行节点是'||p_chn.bank_node_code); 
          elsif mod(aa%rowcount,2)!=0 then
              dbms_output.put_line(p_chn.id||'的银行节点是'||p_chn.bank_node_code);   
          end if;
   end loop; --退出循环
   close aa; --关闭游标
end;
/

后续补充其他……

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值