PL/SQL语法

由于pl/sql是编译后执行的,而sql语句是未经编译的,因此pl/sql语句在执行速度上更快,同时也减少了客户机和服务器的传输。

基本结构

DECLARE

声明变量、常量、用户定义的数据类型以及游标等

可选

BEGIN

主程序体

EXCEPTION

异常处理程序,当程序出现错误时,执行这一部分。

END;

声明部分、执行部分、异常处理部分。执行部分是必须的,其他俩部分可选。

Pl/sql符号

+     加

-     减

*     乘

/     除

=    等于

:=赋值

>    大于

<    小于

(

)

;     语句结束

%    属性指示符

,    项目分隔符

@    数据库连接指示符

/     字符串分界符

:    绑定变量指示符

**    指数操作符

<>    不等于

!=     不等于

~=      不等于

^=      不等于

<=       小于等于

>=       大于等于

:=    赋值

=>     链接操作符

..      范围操作符

||      串连接

--      单行注释

/* */    多行注释

常量和变量

1、定义常量

<常量名> constant <数据类型> := <值>

pass_Score constant INTEGER := 60

2、定义变量

<变量><数据类型>

address VARCHAR2(20);-------------------初始值为NULL

数据类型

1 数字类型: number  、 pls_integer、  binary integer

2 字符类型: varchar2、char 、long、nchar  nvarchar2

varchar2 和数据库中的varchar2不同,最大长度为32767

3日期类型:date

4 布尔类型   boolean---------------true   false  null

5自定义类型

type  <类型名> is <数据类型>

Oracle中 允许定义两种数据类型   record(记录类型)和table(表类型)

type   user_record is record(

id number(5) ,

name varchar2(20),

sex char(1)

)

使用:

auser  user_record

auser.id     auser.name  ..........

另外,pl/sql还提供了两种特殊的变量   %TYPE和%ROWTYPE,用来声明与表的列相匹配的变量和用户定义数据类型。前一个表示单属性的数据类型,后一个表示整个属性列表的结构

上面例子可以改写为:

type   user_record is record(

Id   USERS.id%TYPE

Users是一个表

Id的和 users表中的id类型相同

Name USERS.NAME%TYPE

Sex USERS.SEX%TYPE

)

user_record  USERS%ROWTYPE;

user_record.

aaa EMPLOYEES%ROWTYPE

type aaa is record(

Employee_id number

First_name varchar2()

............

)

结构控制语句

选择结构

If ...then...     If(){}

If...then...else...

If...then...elseif

End if

case

if    no  = 100    then

insert into users()

end if;

if    no  = 100    then

Insert into users();

else

Insert into.....

end if;

If score>90 then

Score := score-5;

else if score<60 then

Score:=score+5;

end if;

case------类似于switch

num:=  case  name

when 'A' then '0001'

when 'B' then '0003'

....

else 'no user'

end;

null结构

Declare

Num1 number;

Num2 number;

Res varchar2(10)

Begin

If num1<num2 then

Res:='yes'

Else

Res:='no';

End if;

End;

Declare

Num1 number;

Num2 number;

Res varchar2(10)

Begin

If num1>num2 then

Res:='no'

Else

Res:='yes';

End if;

End;

当num1=1 num2=null时,结果将是不同的

所以要在程序中加入null值检查

If    num1 is  null   or   num2 is null  then  res :=‘noresult’

Else if。。。。。。。。。。。

循环结构

1  loop...exit...end

Control_var := 0;   循环因子

loop--------------------------------------------循环开始

If control_var>5 then

Exit;

End if;

Control_var:=Control_var+1;

.......

End loop;------------------------------------------循环结束

2  loop...exit when...end

Control_var := 0;

Loop

Exit when  Control_var>5

Control_var:=Control_var+1;

End loop;

3.while ...loop...end

Control_var := 0;

While Control_var<5 loop

Control_var:=Control_var+1;

......

End loop;

4.for... In...loop...end

for control_var in 0..5 loop

.......

End loop;

declare

control_var number;

begin

control_var:=0;

for control_var in 0..5 loop

dbms_output.put_line('123');

end loop;

end;

游标   cursor

类似于C语言中的指针,但指针的数据是定义好的,游标用select语句从表或视图中选出需要的数据,然后放入内存中,游标指向查询结果的首部。使用游标对此查询结果进行一些取值操作,随着游标的移动,也就访问到了所有的行。

游标分为两种:

隐示游标-----------不需要用户定义。

显示游标-------  用户自己定义

显示游标处理包括4个步骤:

1 声明游标

2 为查询打开游标

3 将结果提取到pl/sql变量中

4 关闭游标

例子:

declare

user_id users.id%type;

user_name users.name%type;

user_age users.age%type;

cursor user_cur is select * from users; -- 定义游标

begin

open user_cur; -- 打开游标

fetch user_cur into user_id,user_name,user_age; --将第一行数据存入变量,游标后移

loop --Exit when user_cur%NOTFOUND

Exit when not user_cur%FOUND;---如果游标到结尾结束

if user_age>20 then

dbms_output.put_line('老人');

else

dbms_output.put_line('年轻人');

end if;

fetch user_cur into user_id,user_name,user_age;

end loop;

close user_cur;

end;

隐式游标操作

Select id ,name,sex into user_id,user_name,user_sex from users where id =100;

游标的属性操作

%FOUND-----是否找到游标

%NOTFOUND---是否没找到游标

%ROWCOUNT------游标行数

%ISOPEN

----------------------------------------------------------------------------------------------------------------

动态游标

声明:

TYPE<类型名>  IS  REF  CURSOR  RETURN <返回类型>

Type user_cur_type is ref cursor return users%rowtype;

User_cur   user_cur_type;

也可不加return-------即,非受限游标变量

Type user_cur_type is ref cursor;

User_cur   user_cur_type;

存储过程:

Create or replace mycount(in_sex in user.ssex%type)

As

Out_num number;

Begin

If in_sex ='m' then

Select count(sex) into out_num from users where sex='m';

Dbms_output.put_line(out_num);

Else

Select count(sex) into out_num from users where sex='f;

Dbms_output.put_line(out_num);

End if;

End count;

执行

Execute count(‘m’);

参数类型:

In类型参数

Out类型参数

In out 类型参数

Create or replace produce double(in_num in number,out_num out number)as

Begin

Out_num:=in_num*2;

End double;

PL/SQL语法的更多相关文章

  1. 【SQL】Oracle的PL/SQL语法及其拓展数据类型总结

    PL/SQL语法 PL/SQL程序由三部分组成,声明部分.执行部分.异常处理部分. 模板: DECLARE /*变量声明*/ BEGIN /*程序主体*/ EXCEPTION /*异常处理部分*/ E ...

  2. PL/SQL编程基础(一):PL/SQL语法简介(匿名PL/SQL块)

    PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/ ...

  3. SQL PL/SQL语法手册

    SQL  PL/SQL语法手册 目   录 第一部分  SQL语法部分 3 一. CREATE TABLE 语句 3 二. CREATE SEQUENCE语句 5 三. CREATE VIEW语句 6 ...

  4. PL/sql语法单元

    1.字符集 PL/SQL的字符集包括: 所有大小写字母:包括A~Z和a~z. 数字:包括0~9. 空白字符:包括制表符.空格和回车符 其他常用英文符号 2.标识符 标识符用于定义PL/sql变量.常量 ...

  5. oracle PL/SQL语法基础

    目录 数据类型 定义变量 PL/SQL控制结构 参考资料 Oracle10g数据类型总结 PL/SQL之基础篇 数据类型 学习总结 字符类型 char.nchar.varchar.nvarchar:有 ...

  6. oracle学习笔记(十五) PL/SQL语法结构以及使用

    PL/SQL 简介 PL/SQL 是过程语言(Procedural Language)与结构化查询语言(SQL)结合而成的编程语言. PL/SQL 是对 SQL 的扩展. 支持多种数据类型,如大对象和 ...

  7. 匿名PL/SQL

    立此存照 匿名PL/SQL 语法结构:PL/SQL是一种块结构的语言,组成PL/SQL程序的单元是逻辑块,一个PL/SQL程序包含了一个或多个逻辑块,每一块都可以划分3个部分.变量在使用前必须声明,P ...

  8. Oracle——PL/SQL 语句

    目录: 1.什么是PL/SQL  2.PL/SQL 语法基础 3.PL/SQL 实例 一.过程 实例   二.函数 实例   三.游标的使用 实例 四.动态sql 实例 五.触发器 实例  1.什么是 ...

  9. PL/SQL学习笔记_01_基础

    PL/SQL语句可以在Oracle客户端的 SQL窗口或者 command  窗口中运行 在SQL窗口中运行步骤同 SQL语句 在command  窗口中运行的步骤如下: 1)File—new com ...

随机推荐

  1. rsync 服务配置_rsync命令使用方法

    rsync介绍 rsync用来定时备份服务器中的文件或者目录,有三种工作模式,本地复制,使用系统用户认证,守护进程方式,开源高效.同步工具,把一台机器上的文件同步都另一台机器 .默认使用873端口 选 ...

  2. Centos6.8安装mysql 步骤

    第1步.查看CentOS下是否已安装mysql 输入命令 :yum list installed | grep mysql 第2步.删除已安装mysql 输入命令:yum -y remove mysq ...

  3. Jenkins 基础篇 - 任务创建

    前面了解了 Jenkins 上各种任务的区别后,我们就来实践应用下,先创建一个[文件夹]类型的任务,将我们目前的一些基础的演示任务[移动]到文件夹里面去,这样可以先做个简单的分类. 新建一个[文件夹] ...

  4. GO文件读写03---使用缓冲读写实现视频文件的拷贝

    package main import ( "bufio" "fmt" "io" "os" ) /* ·使用缓冲读写实现 ...

  5. Relay外部库使用

    Relay外部库使用 本文介绍如何将cuDNN或cuBLAS等外部库与Relay一起使用. Relay内部使用TVM生成目标特定的代码.例如,使用cuda后端,TVM为用户提供的网络中的所有层生成cu ...

  6. Linux实现ffmpeg H.265视频编码

    Linux实现ffmpeg H.265视频编码 几乎所有观看的视频,数字地面电视,电缆,卫星或互联网上的压缩.原始的,未压缩的视频太大,会浪费太多的带宽.在DVD和Blu-ray之前,有视频CD(VC ...

  7. 人工智能AI智能加速卡技术

    人工智能AI智能加速卡技术 一. 可编程AI加速卡 1. 概述: 这款可编程AI加速器卡具备 FPGA 加速的强大性能和多功能性,可部署AI加速器IP(WNN/GNN,直接加速卷积神经网络,直接运行常 ...

  8. 使用现代C++如何避免bugs(下)

     使用现代C++如何避免bugs(下) About virtual functions Virtual functions hinder a potential problem: the thing ...

  9. SpringBoot2 参数管理实践,入参出参与校验

    一.参数管理 在编程系统中,为了能写出良好的代码,会根据是各种设计模式.原则.约束等去规范代码,从而提高代码的可读性.复用性.可修改,实际上个人觉得,如果写出的代码很好,即别人修改也无法破坏原作者的思 ...

  10. 九、配置Tomcat集群

    配置Tomcat集群所需服务器三台:192.168.1.5(调度服务器).192.168.1.10(WEB1),192.168.1.20(WEB2) 1.调度服务器设置 [root@proxy ~]# ...