PL/SQL是没命名的存储过程,函数,触发器,PL/SQL块的语法格式如下:

[declare]

--声明部分,可选

begin

--执行部分,必须

[exception]

--异常处理部分,可选

end

PL/SQL块每条语句必须用分号结束,单行注释--,多行注释/*...*/,下面是一个PL/SQL块例子

set serveroutput on

declare

  --声明变量

  a int :=  1;  --声明并且赋值

  address varchar2(128);

  mobilephone varchar2(20);

  username varchar2(50);

begin

  select address, mobilepone, usrename into address, mobilephone, username from orderinfo where orderid = 1

  dbms_output.put_line('用户' || username || '的地址是' || address || '手机是' || mobilephone);  --||字符连接运算符

exception

  when others then

  dbms_output.put_line('获取数据失败!');

end;

数据类型

1.数值类型:numeric,dec,decimal,double,integer,int,smallint,binary_integer,pls_integer

2.字符类型:varchar2, char, long,nchar,nvarchar2

varchar2最大长变为4000字节,长度可变

char最大长度为2000字节,长度不可变

long最大长度为32767字节,2GB

3.日期类型:date,7个字节

4.布尔类型boolean

特殊数据类型

1.%type可以声明一个与指定列名相同的数据类型

var_orderid orderinfo.orderid%type;  var_orderid与orderinfo表中的orderid字段数据类型相同

2.record数据类型

用type语句进行定义,record类型是一种结构化数据类型,相当于C#的结构类型,可以存储多个列值组成一行,格式:

type record_type is record

(

   var_member1 data_type [not null] [:=default_value],

     ...

    var_member2 data_type [not null] [:=default_value]

 )

例子:

type orderinfo is record

(

  orderid int not null:=1,

  ordercode varchar2(20) not null

)

3.%rowtype

它可以根据表中的结构定义一种特殊的数据类型

var_orderinfo orderinfo%rowtype  --var_orderinfo变量名,orderinfo表名

定义变量和常量

<变量名> <数据类型>[(长度):=<初始值>];

var_name int;

var_name2 varchar2(20);

var_name3 numeric:=3;

定义常量

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

con_name constant integer:=3;

流程控制

1.if语句

if <condition_expression1> then

  plsql_sentence;

elseif <condition_expression2> then

  plsql_sentence;

else

  plsql_sentence;

end;

2.case语句

case <selector>

  when <expression_1> then plsql_sentence;

  when <expression_2> then plsql_sentence;

  .......

  when <expression_n> then plsql_sentence;

  [else plsql_sentence;]

end case;

循环语句

1.loop

loop语句先执行一次循环体,然后再判断exit when关键字后面的条件表达式的值true还是false,如果是true退出循环体,否则继续执行循环体

loop

  plsql_sentence;

  exit when end_condition_exp;

end loop;

例子:

declare

  sum int := 0;

  i int := 0;

begin

  loop

    i:= i+1;

    sum := sum + i;

    exit when i= 100;

  end loop;

end;

2.while语句

while condition loop

  plsql_sentence;

end loop;

3.for语句

for counter in [reverse] min..max loop

  plsql_sentence;

end loop;

默认情况下计数器的值会循环递增,reverse关键字使计数器会随着循环器递减

for i in 1..100 loop

  dbms_output.put_line(i);

end loop;

pl/sql游标

显示游标

使用游标顺序

1.声明游标

2.打开游标

3.读取游标

4.数据是否为空,是关闭游标,否继续读取

1.声明游标

cursor cur_name[(input_parameter1,input_parameter2...)]

[return ret_type]

is select_sentence;

input_parameter:para_name [in] datatype [{:= default|para_value}]

例子

cursor cur_orderinfo(ordercode in varchar2 := '0000000')

is select * from orderinfo where ordercode= ordercode;

这里的参数不可以指定长度,否则会报错

2.打开游标

open cur_name[(para_value[,para_value2]...)];

para_value:指定输入参数的值

open cur_orderinfo('11111111');

param_value是可选参数,如果未指定则用声明使用的默认值,如果指定了则用这里指定的值

3.读取游标

fetch cur_name into {variable};

例子:

var_orderinfo orderinfo%rowtype;

fetch cur_order into var_orderinfo;

如果有值的话,可以用var_orderinfo.orderid读取数据

4.关闭游标

close cur_name;

例子:

close cur_orderinfo;

游标的属性

1.%found 布尔型属性 ,如果SQL语句至少影响到一行数据,则该属性返回御前,否则返回false

2.%notfound 与%found属性相反

3.%rowcount 数字型属性,返回受SQL语句影响的行数

4.%isopen  布尔型属性,游标打开返回true,关闭返回false

例子:

set serveroutput on

declare

  cursor cur_orderinfo (username in varchar2)

  is select * from orderinfo where username= username;

  var_orderinfo orderinfo%rowtype;

begin

  open cur_orderinfo('abcd');

  fetch cur_orderinfo into var_orderinfo;

  while cur_orderinfo%found loop

    dbms_output.put_line('订单编号:' || var_orderinfo.ordercode);

    fetch cur_orderinfo into var_orderinfo;

  end loop;

  close cur_orderinfo;

exception

  when others then

    dbms_output.put_line('错误');   

end;

隐式游标

在执行一个SQL语句时,Oracle会自动创建一个隐式游标。这个游标是内存中处理该语句的工作区域,隐式游标主要是处理数据操纵语句(如update,

delete语句)的执行结果,当然特殊情况下,也可以处理select语句的查询结果。由于隐式游标也有属性,当使用隐式游标属性时,需要在属性前面加上隐式

游标的默认名称--SQL。在实际编程中,经常使用隐式游标来判断更新数据行或删除数据行的情况。

set serveroutput on

begin

  update orderinfo set mobilephone = '1111111111' where username = 'abcd';

  if sql%notfound then

    dbms_output.put_line('此用户不需要更新手机号码');

  else

    dbms_output.put_line('更新手机成功');

  end if;

end;

通过for语句循环游标

1.for语句循环隐式游标

begin

for var_orderinfo in (select * from orderinfo)

loop

  sql_sentences;

end loop;

end;

2.for语句循环显示游标

declare

  cursor cur_orderinfo is select * from orderinfo;

begin

  for var_orderinfo in cur_orderinfo

  loop

    sql_sentences;

  end loop;

end;

for语句循环游标时,可以声明游标,但不用打开,读取,关闭游标。

  

oracle学习笔记4:PL/SQL的更多相关文章

  1. Oracle学习笔记之PL/SQL编程

           SQL(Structure Query Language)的含义是结构化查询语句,最早由Boyce和Chambedin在1974年提出,称为SEQUEL语言.1976年,IBM公司的Sa ...

  2. Oracle学习笔记之四,SQL语言入门

    1. SQL语言概述 1.1 SQL语言特点 集合性,SQL可以的高层的数据结构上进行工作,工作时不是单条地处理记录,而对数据进行成组的处理. 统一性,操作任务主要包括:查询数据:插入.修改和删除数据 ...

  3. Oracle学习DaySix(PL/SQL续)

    一.游标 在 PL/SQL 程序中,对于处理多行记录的事务经常使用游标来实现.游标是一个指向上下文的句柄( handle)或指针.通过游标,PL/SQL 可以控制上下文区和处理语句时上 下文区会发生些 ...

  4. Oracle学习DayFive(PL/SQL)

    一.PL/SQL简介  PL/SQL 是 Procedure Language & Structured Query Language 的缩写.PL/SQL 是对 SQL 语言存储过程语言的扩 ...

  5. Oracle学习(十一):PL/SQL

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/v123411739/article/details/30231659 1.知识点:能够对照以下的录屏 ...

  6. 吴裕雄--天生自然ORACLE数据库学习笔记:PL/SQL编程

    set serveroutput on declare a ; b ; c number; begin c:=(a+b)/(a-b); dbms_output.put_line(c); excepti ...

  7. Oracle学习笔记_02_基本SQL

    1.select语句 (1)语法 SELECT *|{[DISTINCT] column|expression [alias],...} FROM table; (2)示例: 选择全部列 SELECT ...

  8. Oracle学习笔记之四sp1,Oracle 11g的常用函数

    从Oracle学习笔记之四,SQL语言入门中摘出来的,独立成一章节 3.1 字符类函数 ASCII(c)和CHR(i)    分别用于返回一个字符的ASCII码和返回给定ASCII值所对应的字符. C ...

  9. Oracle 学习笔记(Windows 环境下安装 + PL/SQL)

    Oracle 安装.PL/SQL 配置使用  前言:因更换机械硬盘为 SSD 固态硬盘装了新 Windows 7 系统,需要重新搭建开发环境,把 Oracle 安装过程和 PL/SQL 配置使用做下笔 ...

  10. Oracle 学习笔记 18 -- 存储函数和存储过程(PL/SQL子程序)

    PL/SQL子程序 它包含了函数和过程.此功能是指用户定义的函数.和系统功能是不同的.子程序通常完成特定的功能PL/SQL座.,能够被不同的应用程序多次调用.Oracle提供能够把PL/SQL程序存储 ...

随机推荐

  1. 【Android 复习】 : Activity之间传递数据的几种方式

    在Android开发中,我们通常需要在不同的Activity之间传递数据,下面我们就来总结一下在Activity之间数据传递的几种方式. 1. 使用Intent来传递数据 Intent表示意图,很多时 ...

  2. ARM学习笔记14——C语言和汇编相互套用

    这里,我们要准备两个文件,一个是汇编文件start.S,另一个是C文件led.c.汇编文件套用C文件中的开关灯函数,C文件套用汇编文件中延时函数. //start.S .global led_init ...

  3. ajax向后台传值

    function save_person(){ //保存个人信息编辑 var data = getFormJson(".row"); //获取表单数据 $.post(clerk_u ...

  4. arm汇编--ubuntu12.04 安装arm-linux交叉编译环境

    1. 安装标准的C开发环境,由于Ubuntu安装默认是不安装的,所以需要先安装一下:sudo apt-get install gcc g++ libgcc1 libg++ make gdb 2.从ft ...

  5. node begining

    node begining */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Consola," ...

  6. struts1与strut2的区别

    struts1和struts2是两个完全不同的框架 struts1工作流程:发布Struts Web服务时,根据web.xml初始化ActionServlet,ActionContext等内容.在接到 ...

  7. hdoj 2035 人见人爱A^B

    人见人爱A^B Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Sub ...

  8. 阅读《effective java-第17条》遇到的问题解决与分享

    问题背景 最近这2天准备重新看一遍<effective java>,发现这些经典的书籍真的是看一遍又有一遍的感受.也越来越觉的学习的过程是一个重复的过程.这次遇到的问题是在第17条中看到的 ...

  9. Windows2008安装IIS方法

    1.右键点击 “计算机”,在弹出菜单中选择“管理”选项,在服务器管理器左侧界面 点击 “角色”选项,如下图: 2.点击“添加角色”按钮后,弹出如下界面 3.选择“角色”列表中的“Web服务器(IIS) ...

  10. 应用程序无法正常启动0xc0150002 解决方式

        我也遇到过此问题,解决的方法: 方案一: 在项目的"属性|配置属性|链接器|常规"中的"启用增量链接"选择"否".此方法阻断了问题产 ...