首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 冲浪宝典 > 网络资源 > Oracle初学者笔记(十二)--PL/SQL1_基础
【标  题】:Oracle初学者笔记(十二)--PL/SQL1_基础
【关键字】:Oracle,--PL/SQL1_
【来  源】:http://blog.csdn.net/format_jade/archive/2005/10/25/516035.aspx

Oracle初学者笔记(十二)--PL/SQL1_基础

PL/SQL的介绍

PL/SQL:Procedural Language/SQL 过程SQL;

是对SQL的扩展;

PL/SQL中存在过程构造和数据库访问;

Oralce服务器和客户机应用程序中使用;

支持大型对象和集合;

实质是在过程语言中嵌入了SQL而不是相反;

SQL可以对数据库进行处理,但是它是单条执行的,无法进行连续的处理,也就是说没有逻辑;

 

 

 

              特点:

支持对象类型和集合;

调用外部函数和过程;

支持SQL;

支持OOP;

可以在Oracle各个版本间移植,与Oracle集成在一起;

 

 

 

       PL/SQL执行原理

PL/SQL块:

包括一组语句:

       声明部分:所有变量的声明;

       可执行部分:必须有;

       异常处理部分;

结构:

       Declare

              Declarations //声明区域

       Degin

              Executable statements

       Exception

              Handlers;  //如果没有这个处理语句,则会交给系统处理,类似给虚拟机;

       End;

实例:

       Declare

              Eno emp.empno%type;

              Name emp.ename%type;

       Begin

              Select empno,ename into eno,name from  emp where empno=8933;

              Dbms_output.put_line(‘empno:’||eno||’   ‘||’ename:’||name);

       Exception

              When no_data_found then

                     Dbms_output.put_line(‘没有数据’);

       End;

 

 

 

出现错误后,错误后的语句不再执行,跳转到错误处理块执行;

              变量的定义

变量是数据的临时存储;

可直接对其赋值;

数据类型:

       内置数据类型:

标量:一般数据类型,容纳单个值,number(38),character(有个long子类型),date,boolean(不能用来定义字段)

              复合:可变数组,对象类型;record,varray,nested table;

              引用:类似游标 ref cursor;

              LOB:大型对象类型

*****SQL-Plus的回显服务器端信息的命令:set serveroutput on

SQL> r

  1  declare

  2    eno varchar(10):='000';

  3    ename varchar(20);

  4    isExisted boolean default false;

  5    empName constant varchar(10):='Mike';

  6  begin

  7    eno:='7890';

  8    ename:='smith';

          Dbms_output.put_line(‘eno=’||eno||’ ‘||’ename=’||ename);

  9* end;

eno=7890 ename=smith

PL/SQL 过程完成;

 

 

 

如果想动态输出数据库中的信息的话,可以在begin后面这样写:

       Select empno,ename to eno,ename from emp where empno=’7002’;

这里如果不加where 语句,则会抛出:实际返回的行数超出请求的行数异常;

SQL> r

  1  declare

  2   eno varchar(10):='000';

  3   ename varchar(20);

  4   isExisted boolean default false;

  5   empName constant varchar(10):='Mike';

  6   begin

  7      select empno,ename into eno,ename from emp;//这里没有where

  8      Dbms_output.put_line('eno='||eno||' '||'ename='||ename);

  9*  end;

declare

*

ERROR λÓÚµÚ 1 ÐÐ:

ORA-01422: ʵ¼Ê·µ»ØµÄÐÐÊý³¬³öÇëÇóµÄÐÐÊý

ORA-06512: ÔÚline 7

 

 

 

SQL语句中对变量赋值用into,SQL以外用 :=来赋值;

 

 

 

 

 

 

匿名PL/SQL程序块;

注释:--    /*   */

属性

%type 引用数据库列

%rowtype 代表表中的行

也就是说为了防止发生定义的变量长度小于选择的数值长度的异常,我们用这两个属性来做为自适应的变量定义;

SQL> r

  1  declare

  2   eno emp.empno%type;

  3   ename emp.ename%type;  ---代表相应字段的类型

  4   emprow emp%rowtype;   --代表一行

  5   isExisted boolean default false;

  6   empName constant varchar(10):='Mike';

  7   begin

  8      select empno,ename into eno,ename from emp where empno=7902;

  9      select * into emprow from emp where empno=7788;   --使用emprow返回一行

 10      Dbms_output.put_line('eno='||eno||' '||'ename='||ename);

 11      dbms_output.put_line('empno:'||emprow.empno||'ename:'||emprow.ename);

 12*  end;

eno=7902 ename=FORD

empno:7788ename:SCOTT

 

 

 

PL/SQL ¹ý³ÌÒѳɹ¦Íê³É¡£

 

 

 

比较运算

Dbms_output.put_line('eno='||eno||' '||'ename='||ename);

只能输出字符型的,所以如果你要输出一个date型的,必须首先用to_char(date,’’)转换日期型数据,正如我们经常to_date(char,’’)一样;

SQL> r

  1  declare

  2    eno emp.empno%type;

  3    ename emp.ename%type;

  4    emprow emp%rowtype;

  5    thisday date;

  6  begin

  7    thisday:=sysdate;

  8    dbms_output.put_line('this is day:'||to_char(thisday,'YYYY-mm-dd'));

  9* end;

this is day:2005-10-24

 

 

 

比较日期的练习

SQL> r

  1  declare

  2    eno emp.empno%type;

  3    ename emp.ename%type;

  4    emprow emp%rowtype;

  5    thisday date;

  6  begin

  7    thisday:=sysdate;

  8    if thisday>todate(‘2005-10-23’,’yyyy-mm-dd’) then

  9    dbms_output.put_line('this is day:'||to_char(thisday,'YYYY-mm-dd'));

 10    else

 11    dbms_output.put_line('this is kao');

 12    end if;

 13* end;

this is day:2005-10-24

 

 

 

控制语句

1,条件控制:f then ,if then else , if then elsif , case

语句块结束的时候必须写end if;

2,循环控制:

计算1加到100

3,顺序控制:goto 不建议使用;

   Null :空语句;有时候暂时不想在需要有代码的地方编代码时用null语句就行;

 

 

 

错误处理

 

 

 

两重类型的异常:预定义的;

                            用户定义的;raise语句可手工引发异常;

TMDJava一模一样;

Ms-SQL 连接基础知识:【上一篇】
sqlserver过滤字符串中的空格的自定义函数:【下一篇】
【相关文章】
  • Oracle初学者笔记(十三)--PL/SQL2_异常处理和游标
  • Oracle初学者笔记(十四)--子程序和程序包
  • Oracle初学者笔记(十五)--触发器和内置程序包
  • Oracle初学者笔记终结篇--集合和成员函数
  • Oracle专家调优秘密(转)
  • 动态SQL——EXPERT ONE-ON-ONE ORACLE
  • Oracle HowTo:如何在Oracle10g中启动和关闭OEM
  • Oracle HowTo:如何快速杀死占用过多资源(CPU,内存)的数据库进程
  • 在oracle中字段类型LONG的使用注意事项
  • Oracle 10g SQL 优化再学习
  • 【随机文章】
  • 正则表达式--简单模式
  • Windows Vista ATI Radeon Kernel Mode Driver Denial of Service
  • 关于ajax的一些随笔
  • Oracle Listener启动失效
  • mysql 建立和应用外键的前提条件
  • 乒乓球拍写实技巧
  • “制作网页”建议数点
  • 生命在于运动,皮肤那就在于保养,湿疹,治疗湿疹美国永康三效合一
  • ASP讲座之十:自己动手编写组件
  • 设计模式[创建型]之单件模式
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.