`
panshisong
  • 浏览: 3371 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类
最新评论

PLSQL基础

阅读更多
pl/sql程序块的基本结构
declare        //声明变量
begin  //程序块的主体部分
...
end;
/              //表示执行该程序

在声明变量的时候,如果变量是一个常量的话使用constant关键字并且赋值。
pl/sql中赋值的符号位为 :=(冒号跟等号).
例如 text constant number(4)  := 1 ;
在PL/SQL中定义变量和常量的时候 需要指定其类型,比如number、varchar2等
但是到后面为该字段赋值的时候与表的字段类型不符会报错。所以通常情况下我们改成这样写。
text_number constant text.number%type := 1 ;
text_name text.name%type;
这样是意思是定义了text_name和text_number变量 为text表中name,number两个字段。这样在后面就不必担心其类型的不匹配了。
如果我们需要定义表中的所有字段,而这字段有几十个或者上百个,那这工作不是太繁琐了吗,别担心。我们还可以使用%rowtype方式。
例如:declare
emp_number constant emp.empno%type := 7900 ;
one_emp emp%rowtype;
这样我们就把emp表中的所有的字段都定义进去了,方便吧。
接下来我们来看看条件选着语句吧。语法形式如下:
   if condition then
statements
elsif condition then
statements
else
statements
end if;
其中condition表示布尔表达式,statements表示condition为true时的执行语句。if条件语句用于选择条件较小的情况。如果选着的条件很多,为了以后方便维护,建议使用case语句,语法如下。
   case search_expression
when expression1 then result1;
when expression2 then result2;
...
   else default_result;
end case;
其中search_expression表示待求值的表达式,when expression1 then result1表示如果expression1的值和待求值表达式的值相同返回result1.
如果匹配全部选项之后任然没有相等的则返回default_result.
上面这种叫普通case表达式,还有一种叫搜索case表达式。其语法如下:
case
when condition1 then result1;
when condition2 then result2;
...
else default_result;
end case;
其中condition表示判断的条件范围。
与简单case表达式比较可以发现,case关键字后面不再跟随待求值表达式,而when子句也换成条件语句(condition),其实搜索case表达式就是将待求值表达式放在条件语句中进行比较,这样就不是只能进行单个值比较了。学完这些之后我想我们应该能写个简单的sql语句了。

例题:在检阅图书信息的同时我们需要判断该书是否是新书(最近一个月出版)如果是的话显示‘new’,根据借阅的情况我们判断它是否受欢迎(一个月借阅次数5次以上)如果是显示‘hot’,如果两者都是显示‘new,hot’。根据需求写出sql语句。
select b.bookname,b.bookpress,b.booktime,(
case
when (booktime between add_months(sysdate,-1) and sysdate) and (
(select count(1) from lend l where     l.bookid = b.bookid and (l.lendtime between    add_months(sysdate,-1) and sysdate)
)>=5
    )
then 'new,hot'
when booktime between add_months(sysdate,-1) and sysdate
        then  'new'
when (booktime between add_months(sysdate,-1) and   sysdate) and (
(select count(1) from lend l where     l.bookid = b.bookid and (l.lendtime between    add_months(sysdate,-1) and sysdate)
)>=5
then 'hot'
else '空'
end
) as 信息结果
from book b ;
相信大家都能看明白吧。下面我们来学习循环语句。
循环语句一般由循环体和循环结束条件组成。
最简单的循环语句语法。
loop
    statements;
    exit condition;
end loop;
其中statements表示循环体,condition表示循环结束条件
对上面的语句进行优化 把循环结束条件放到外面去,
while condition
  loop
statements;
end loop;
现在给一个小例子,循环输出数字1到10;
declare
i binary_integer :=1;
begin
  while i<=10;
loop
  dbms_output.put_line(i);
  i := i+;
end loop;
end;
/
在sqlplus中能循环打印出1到10。
跟java语言一样还用一种用得最多的是for循环,语法如下:
for loop_variable in [reverse] lower_bound .. upper_bound
loop
  statements;
end loop;
其中loop_variable表示循环变量跟java一样不需要提前定义,in 表示取值的范围,reverse表示逆向输出,默认是顺序输出。lower_bound表示循环开始值,upper_bound表示最大值。
学习了循环的基础知识之后我们就可以学习游标的知识了,循环主要用在游标中,而游标常用于对结果集中单独的行进行操作。使用游标有4个步骤
声明游标、打开游标、检索游标、关闭游标。
使用cursor关键字声明游标。
使用open关键字打开游标
使用fetch关键字检索游标
使用close关键字关闭游标
来让我们来看个简单的游标循环
declare
   cursor emp_cursor (dept_number nuber := 20) //声明一个游标并给初始值(此处需要特别注意 后面是没有分号的 加分号报错)
   is
   select empno,ename,job,sal from emp where deptno = dept_number ;
type emp_type is record(
  empno number(4),
  ename varchar2(10),
  job varchar2(10),
  sal number(7,3)
);                                   //创建纪录类型
one_emp emp_type;
begin
   open emp_cursor(20);                      //打开游标
loop
   fetch emp_cursor into one_emp ;            //检索游标
   exit when emp_cursor%notfound ;            //当游标无返回纪录时退出循环
   dbms_output.put_line('当前检索行'||emp_cursor%rowtype||'+:'||one_emp.ename);
   end loop;                                  //结束循环
   close emp_cursor;                          //关闭游标
   end;
/
让我们看看另一种写法用for循环实现的游标
set serveroutput on
declare
  cursor emp_cursor(dept_number number := 20)
  is
  select empno,ename,job,sal from emp where deptno=dept_number;
begin
  for current_cursor in emp_cursor            //此处的for循环简化了很多的代码
    loop
      dbms_output.put_line(emp_cursor%rowcount||current_cursor.ename);
      end loop;
      end;
但是使用for循环的时候有点需要特别注意 不能对游标open、fetch、close的操作。如果游标有输入参数,则只能使用该默认值。
  使用游标循环出的数据之后我们可以做什么呢?我们可以update和delete对应的数据行。正是因为有这样的需求我们才会用到游标。
使用for update of 数据行 nowait ; //表示锁定数据行 接下来对改行进行操作
例如:
--案例:加工资,普通员工加1000,经理加3000。
--说明:经理,job='MANAGER';其它都是普通员工。
declare
cursor emp_cursor is select * from emp for update;
BEGIN
  FOR emp_cur IN  emp_cursor
  LOOP 
     IF(emp_cur.job='MANAGER')THEN
         UPDATE emp e SET e.sal=e.sal+3000 WHERE e.empno = emp_cur.empno;
     ELSE
         UPDATE emp e SET e.sal=e.sal+1000 WHERE e.empno = emp_cur.empno;
     END IF;
  END LOOP;
END;

任何程序都有可能产生异常,pl/sql也一样,下面我们来看看它是怎么处理异常的。
语法如下:
exception
when exception1 then statements1;
when exception2 then statements2;
when others then statementN;
这语法很好理解 定义exception关键字 然后分别判断执行。
实例:
set serveroutput on
declare
age varchar2(4) := '11岁';
begin
   dbms_output.put_line('测试异常发生前内容有没有执行');
   dbms_output.put_line(cast(age as number));  //cast函数表示进行类型转换
   exception
     when value_error then dbms_output.put_line('异常提示:该字符串不能转换成数字');
     dbms_output.put_line('异常发生后内容有没有执行');
     end;
     /
分享到:
评论

相关推荐

    PLSQL基础PLSQL基础

    PLSQL基础 看完这个,基本的存储过程什么的,应该是没有问题的.

    PLSQL基础知识讲解

    PLSQL基础知识讲解,PLSQL基础知识讲解,PLSQL基础知识讲解,PLSQL基础知识讲解,PLSQL基础知识讲解,PLSQL基础知识讲解

    plsql基础(ppt)

    plsql基础

    PLSQL基础入门

    PLSQL基础入门 PLSQL是Oracle数据库中的一种过程语言,用于编写存储过程、函数和触发器。PLSQL的基础知识点包括变量声明、数据类型、控制结构、异常处理等。 一、基础概念 1. PL/SQL是不区分大小写的,除非是由...

    PLSQL基础和ORALCE基础

    标题中的“PLSQL基础和ORACLE基础”涵盖了两个主要的数据库技术领域,即PL/SQL(Procedural Language/Structured Query Language)和Oracle数据库的基础知识。PL/SQL是Oracle数据库支持的一种过程化编程语言,而...

    plsql基础知识及其实践

    plsql基础

    PLSQL基础入门教程-必看

    "PLSQL基础入门教程-必看" 作为PLSQL基础入门教程,这篇文章旨在为读者提供一个系统的PLSQL入门指南。从PLSQL的基本概念到高级应用,本教程涵盖了PLSQL的所有方面,为读者提供了一个全面的学习体验。 首先,让我们...

    PLSQL基础入门手册

    这篇“PLSQL基础入门手册”正是针对初学者设计的,旨在帮助他们快速掌握PLSQL的基础知识和核心概念。 首先,我们要理解PLSQL的基本结构,它由三部分组成:声明部分、执行部分和异常处理部分。声明部分定义变量、...

    PLSQL基础.zip

    PLSQL基础.zip PLSQL基础.zipPLSQL基础.zipPLSQL基础.zipPLSQL基础.zipPLSQL基础.zipPLSQL基础.zipPLSQL基础.zipPLSQL基础.zipPLSQL基础.zipPLSQL基础.zipPLSQL基础.zipPLSQL基础.zip

    ORACLE 数据库开发_PLSQL基础.doc

    大量源码案例,手把手教你PLSQL数据库开发。内容预览: ---- 第一章 PL/SQL 简介 ---- ---- 第二章 PL/SQL程序结构 ---- ---- 第三章 变量与数据类型 ---- ---- 第四章 PL/SQL控制语句 ---- ---- 第五章 PL/SQL游标 ...

    PLSQL基础资料学习

    PLSQL基础资料学习,非常适合初学者学习,里面写了PLSQL的基础资料.

    oracle plsql 基础详解

    Oracle PL/SQL是一种强大的编程语言,它将SQL与过程编程语言...阅读“PLSQL基础.pdf”这样的资料将对深入理解和掌握这些概念大有裨益。在实际开发中,了解并熟练运用这些概念,将有助于提升数据库应用的性能和稳定性。

    plsql基础操作讲解与练习

    在这个"plsql基础操作讲解与练习"的学习资料中,我们将深入探讨PL/SQL的基础知识和实践应用。 首先,我们要理解PL/SQL的基本结构,它由声明部分、执行部分和异常处理部分组成。声明部分用于定义变量、常量、游标、...

    PLSQL学习基础课件PPT

    通过这份“PLSQL基础学习学习课件”,初学者可以逐步了解并掌握PLSQL的基本概念、语法和应用,为进一步的数据库开发和管理打下坚实基础。这份课件将详细解析上述知识点,并通过实例演示如何编写和执行PLSQL代码,...

    oracle+PLSQL基础

    在这个"Oracle+PLSQL基础"的学习资料中,你将深入理解以下几个关键知识点: 1. **SQL语法**:SQL(Structured Query Language)是用于管理和操作数据库的标准语言。基础包括数据查询、插入、更新和删除操作,以及更...

    PLSQL基础培训文档

    标题:PLSQL基础培训文档 描述:这份PDF格式的官方专业基础文档旨在为希望深入了解并掌握PL/SQL编程语言的学员提供全面的学习资源。PL/SQL(Procedural Language for SQL)是Oracle数据库的一种内嵌式过程化语言,...

    Oracle PLSQL基础培训_练习.ppt

    Oracle PLSQL基础培训_练习.ppt

    ORACLE_PLSQL基础

    ORACLE_PLSQL基础的介绍,PPT课件,还不错

    PLSQL基础.pdf

    PLSQL基础教程,入门级.可以帮助你快速掌握PL/SQL编程.

Global site tag (gtag.js) - Google Analytics