打印  hi

set serveroutput on   --打开输出开关

declare

          --说明部分(变量说明,光标申明或者例外说明)

begin

          --程序体,语句序列(DML语句)

         dbms_out.put_line(‘hi’);--dbms_out程序包,put_line子程序

exception  

        --例外处理语句

end;

/ --/表示执行上一条语句或程序

desc dbms_out    --查看程序包

声明部分

  • 定义基本变量

类型:char,varchar2,date,number,boolean,long

举例:

name      char(15);

married   boolean  :=true;

psal        number(7,2);

example1:

--使用基本变量类型

declare

--定义基本变量类型

--基本数据类型

number number(7,2);

--字符串变量

name varchar2(20);

--日期变量

date  date;

begin

number =1;

dbms_out.put_line(nember);

name :='zhuzhu';

dbms_out.put_line(name);

date := sysdate;

dbms_out.put_line(date);

--计算明天的日期

dbms_out.put_line(date +1);

end;

example2:

--使用基本变量类型

declare

--定义基本变量类型

--基本数据类型

number number(7,2);

--字符串变量

name varchar2(20);

--日期变量

date  date;

begin

number =1;

dbms_out.put_line(nember);

name :='zhuzhu';

dbms_out.put_line(name);

date := sysdate;

dbms_out.put_line(date);

--计算明天的日期

dbms_out.put_line(date +1);

end;

  • 引用型变量

emp_rec emp.name%type;--引用型变量就是定义一个变量,将一个表的一个字段查询出来赋给它,然后使用它把那个字段的值打印出来(一个值一个字段)

example:

--查询并打印员工号为2的姓名和薪资

set serveroutput on

declare

emp_name emp.name%type;

emp_sal emp.sal%type;

begin

select name  , sal into emp_name ,emp_sal from emp where no = 2;

select sal into emp_sal from emp where no = 2;

dbms_out.put_line(emp_name||''的工资是''||emp_sal);

end;

/

  • 记录型变量

emp_rec emp%rowtype;--记录行变量就是定义一个数组,将一个表的某些字段赋给它,此时它是一个数组,那么就可以使用它将这些字段的值都打印出来(一行值多个字段)

example:

--查询并打印员工号为2的姓名和薪资

set serveroutput on

declare

emp_name_sal emp%rowtype

begin

select * into emp_name_sal from  emp;

dbms_out.put_line(emp_name_sal.name||'的工资是'||emp_name_sal.sal)

end;

/

执行部分

  • 判断语句

  • IF  条件  THEN 语句1;-----只有两种情况

语句2 ;

END IF;

  • IF  条件  THEN 语句1;-----只有两种情况

ELSE      语句2 ;

END IF;

  • IF  条件  THEN 语句1;-----只有三种或三种以上情况

ELSIIF  语句2 ;

ELSIF  语句3;

else    语句4;

END IF;

example:

--判断用户从键盘输入的数字

set serveroutput on

accept num prompt'请输入';

--num为地址值相当于指针

declare

pnum number :=#--取地址为num的值给数据类型为number的变量num

begin

IF pnum =1 THEN DBMS_OUT.PUT_LINE('值为1');

elsif  pnum =2 THEN DBMS_OUT.PUT_LINE('值为2');

elsif  pnum =3 THEN DBMS_OUT.PUT_LINE('值为3');

elsse DBMS_OUT.PUT_LINE('其他值');

end if;

end;

/

  • 循环部分

  • WHILE   循环条件  LOOP

执行语句

END LOOP;

  • LOOP     EXIT[WHEN 退出条件]

执行语句

ENDLOOP;

  • FOR 值  IN 1.。。。n    LOOP

执行语句

END LOOP;

example:

--打印1-----10

set serveroutput on

declare

pnum number :=1;

begin

while pnum<=10 loop                                            loop                                                                   for   pnum in 1...10 loop

DBMS_OUT.PUT_LINE(pnum);                              exit when pnum > 10                                          DBMS_OUT.PUT_LINE(pnum);

pnum := pnum+1;                                                DBMS_OUT.PUT_LINE(pnum);                            pnum := pnum+1;

end loop;                                                              pnum := pnum+1;                                             end loop;

end ;                                                                    end loop;

/

  • 光标:就是一个结果集(列值),它的数据库中打开的数量是有限制的.oracle数据库中只允许在同一个会话中打开300个光标.

光标属性:%found;%notfound;%isopen (判断光标是否打开);%rowcount(影响的行数);

语法:cursor   光标名    is select 语法;

打开光标:open   光标名

定义光标:cursor c is select name from emp;

取光标值给变量:fetch  c into pname ;--将当前指针指向的记录返回并且将指针指向下一个记录(需要取值时使用)

关闭光标是释放资源:close c;

example:

--查询并打印姓名,薪资

set serveroutput on

declare

cursor c is select name,sal from emp;

pname emp.name %type;

psal emp.sal%type;

begin

open c;

loop fetch c into pname,psal;

exit when c %notfound

dbms_out.put_line(pname||的薪资是||psal);

end loop;

end;

/

example:

--给不同职位的员工涨工资

set serveroutput on

declare

cursor c is select pro, job from emp;

pname emp.pro %type;

psal emp.job %type;

begin

open c;

fetch c into pro,job from emp;

exit when c %notfound

if job = '经理'  then update emp set sal := sal+400;

elsif  job = '职员'  then update emp set sal := sal+300;

else  update emp set sal := sal+200;

end loop;

close c;

dbms_out.put_line('更新完成');

end;

/

conmmit;

example:

--使用光标的%%isopen

set serveroutput on

declare

cursor c is select pro, job from emp;

pname emp.pro %type;

psal emp.job %type;

begin

open c;

if c%isopen then

dbms_out.put_line('光标已打开');

else dbms_out.put_line('光标未打开');

end if;

close c;

end;

/

example:

--使用光标的%rowcount属性

set serveroutput on

declare

cursor c is select pro, job from emp;

pname emp.pro %type;

psal emp.job %type;

begin

open c;

loop

fetch c into pro,job from emp;

exit when c%notfound;

dbms_out.put_line('rowcount'||c%rowcount);

end loop;

close c;

end;

/

 关于在一个数据库会话中只能打开300个光标

查看可以打开的光标数量:

show parameter %cursor%    --查看open _cuisor的数字

修改光标数量限制:alter system set open_cursor = 400 scope = both/memory/spfile;   --scope可选both(都进行修改)/memory(只修改当前实例,不修改参数文件)/spfile(只修改参数文件不修改当前实例)中的一个

带参数的光标

语法:cursor   光标名   【参数名    参数数据类型,。。。】 is select 语法;

example:

set serveroutput on

declare

cursor c(dno number) is select pro, job from emp where deptno = dno;  -- dno number为形参

pname emp.pro %type;

begin

open c(10);          --10为实参

loop

fetch c into pname;

exit when c%notfound;

dbms_out.put_line(pename);

end loop;

close c;

end;

/

异常处理部分

例外:程序设计语言提供的一种功能,用来增强语言的容错性和健壮性,分为系统例外和自定义例外。

系统例外:no_data_found         没有找到数据

too_many_rows        查询语句匹配多行

zero_divide               被0除

value_error               算数或转换错误如根号下负数或abc转换为123之类的

timeout_on_resource 在等待资源是发生超时(如:分布式数据库)

example:

no_data_found--查询根本不存在的数据

set serveroutput on

declare

pname emp.name%type;

begin

open c(10);          --10为实参

loop

select name  from  emp where no = 123;

eception

when no_data_found then dbms_out.put_line('未找到');

when others then dbms_out.put_line('其他异常');

end;

/

PL/SQL基础的更多相关文章

  1. Oracle数据库之PL/SQL基础

    介绍PL/SQL之前,先介绍一个图像化工具:Oracle SQL Developer 在oracle的开发过程中, 我们难免会使用第三方开发的软件来辅助我们书写SQL, pl/sql是一个不错的sql ...

  2. Oracle实战笔记(第六天)之PL/SQL基础

    一.PL/SQL介绍 1.概念 PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL).PL/SQL是Oracle数据库对SQL语句的扩展.在普通SQL语 ...

  3. Oracle442个应用场景---------PL/SQL基础

    ----------------------------------------------------------------------------------- 备份和恢复数据库略过.在后面解说 ...

  4. pl/sql基础知识—定义并使用变量

    n  介绍 在编写pl/sql程序是,可以定义变量和常量:在pl/sql程序中包括有: ①标量类型(scalar) ②复合类型(composite) ③参照类型(reference) ④lob(lar ...

  5. PL/SQL基础-异常处理

    --*********异常处理一.异常的类型 ORACLE异常分为两种类型:系统异常.自定义异常. 其中系统异常又分为:预定义异常和非预定义异常.1.预定义异常 ORACLE定义了他们的错误编号和异常 ...

  6. PL/SQL基础2(笔记)

    1 第一个PL/SQL的程序 DECLARE BEGIN DBMS_OUTPUT.PUT_LINE('Hello World!'); END; / --2一个简单的PL/SQL程序 DECLARE v ...

  7. PL/SQL基础1(笔记)

    --基本结构DECLARE--变量声明部分:在此声明PL/SQL用到的变量,类型,游标,以及局部的存储过程和函数BEGIN --执行部分:过程及SQL语句,即程序的主要部分 EXCEPTION --执 ...

  8. oracle PL/SQL基础编程

    PL/SQL(Procedural Language/SQL)是oracle中引入的一种过程化编程语言 PLS-00103:出现符号"declare"在需要下列之一时 符号&quo ...

  9. Oracle数据库—— PL/SQL基础编程

    一.涉及内容 1. 掌握PL/SQL程序块的结构,理解并熟悉各种变量的应用. 二.具体操作 (一)使用system用户登录SQL*PLUS,使用SQL语句创建用户:u_你的姓名首字母(例如:u_zs) ...

  10. PL/SQL 基础编程

    PL/Sql 编程 PL/Sql结构 [declare] --声明变量 begin --执行部分 [exception] ---异常处理部分 end PL/Sql  基本数据类型 数值类型 1. nu ...

随机推荐

  1. ios7 sdk 新特性

    iOS 7 is a major update with compelling features for developers to incorporate into their apps. The ...

  2. 通过xib文件创建和连接UIView

    使用Xcode写程序,时间长了,对于界面上的元素,很多时候不想手写代码进行构建,但是有些UIView里面的子控件,又不能通过xib直接进行构造,要是总使用UIViewController来结合xib进 ...

  3. dorado7第一次使用感受

    今天第一次玩dorado,说一下使用的感受 1.首先是优点: 首先是它的学习文档非常丰富,视频,PDF,PPT,实例,社区一应俱全 界面风格已经帮我们做完,无需担心界面美观的问题 与后台交互非常方便, ...

  4. 如何让Activiti-Explorer使用sql server数据库

    从官网下载的Activiti-explorer的war文件内部默认是使用h2内存数据库的,如果想改用其他的数据库来做持久化,比如sql server,需要做如下配置. 1)修改db.propertie ...

  5. linux0.11下的中断机制分析

    http://orbt.blog.163.com/     异常就是控制流中的突变,用来响应处理器状态中的某些变化.当处理器检测到有事件发生时,它就会通过一张叫做异常表的跳转表,进行一个间接过程调用, ...

  6. [TSP+floyd]POJ3311 Hie with the Pie

    题意: 给i到j花费的地图 1到n编号   一个人要从1遍历n个城市后回到1 求最小的花费(可以重复走) 分析 http://www.cnblogs.com/Empress/p/4039240.htm ...

  7. Django单元测试(二)------测试工具

    The test client test client是一个python类,来模拟一个简单的“哑”浏览器,允许你来测试你的view函数.你可以使用test client完成下列事情: 1.模拟&quo ...

  8. Android list刷新后仍然定位到原来的位置,解决。

    问题: 有一个list,点击item时会做一些事情,然后重新加载数据,此时希望点击重新刷新后item还在原来的位置,而不是跳转到开头. 实现如下: 1.listview添加监听setOnScrollL ...

  9. 简单的信誉算法 js处理

    $(document).ready(function(){ // 初始化 var credit = "{sh:$info.credit}"; var res = getCredit ...

  10. 浅谈 HTML5 的 DOM Storage 机制 (转)

    在开发 Web 应用时,开发者有时需要在本地存储数据.当前浏览器支持 cookie 存储,但其大小有 4KB 的限制.这对于一些 Ajax 应用来说是不够的.更多的存储空间需要浏览器本身或是插件的支持 ...