一、什么是PL-SQL

  PL-SQL是结合了Oracle过程语言和结构化查询语言(SQL)的一种扩展语言。具体来说,PL-SQL就是在普通的SQL语句的基础上增加了编程语言的特点,将数据操作和查询语句组织在PL-SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算的程序语言。

  使用PL-SQL有以下优点:

  1、能够把一组SQL语句放到一个模块中。使其更具模块化特点。

  2、可以在PL-SQL中增加逻辑结构判断、循环等程序结构。

  3、具有异常处理功能。使程序不会中断。

  4、减少网络交互,提高性能。

  5、具有更好的移植性。

二、PL-SQL程序块

PL-SQL程序块包括五个部分,声明部分,程序段开始,代码主体部分,异常部分,程序结束。

DECLARE                    --声明部分
声明变量、常量、游标、用户自定义异常的声明
....
BEGIN --程序开始部分
SQL语句和PL-SQL语句构成的执行语句 --代码主体部分
...
EXCEPTION
程序出现异常时,捕获异常并处理异常。 --异常部分
...
END; --程序结束部分

注意:

1、其中声明部分和异常部分是可选的。

2、DELCARE,BEGIN和EXCEPTION后没有分号,而END和其他所有的PL-SQL语句后必须以分号结束!

三、变量的声明与赋值

1、定义变量的语法:

  DECLARE variable_name date_type(size) [not null][:=value]

  DECLARE:定义变量所使用的关键字。

  variable_name:变量的名称。

  date_type(size):变量的类型,size表示数据长度。

  [not null]:变量不允许为空。

  [:=value]:为变量赋初始值。

示例:  

DECLARE
v_name varchar2(20); --声明一个字符串类型的变量
v_age number:=&age; --声明一个数字类型的变量 &age表示输入数据,会临时弹出一个输入框让我们输入数据。

 PL-SQL中的变量命名规则:

  1、变量名首字母必须是英文字母,后面可以跟上字母、数字、下划线,#,$。

  2、变量名长度不超过30个字符。

  3、变量名中不能有空格。

  4、不能使用关键字命名。

  变量声明通常以字母v_为前缀!

注意:

  变量的声明只在当前程序块中有效。

2、变量的使用和赋值

  a.使用:=进行赋值

  v_name := 'wangwu';  --直接将'wangwu'赋值给变量v_name;

  

  b.使用select..into..进行赋值

DECLARE
PROID NUMBER := &ID;
PNAME VARCHAR(20);
BEGIN
SELECT NAME INTO PNAME FROM ES_PRODUCT WHERE ID = PROID; --将name列的值赋给pname
DBMS_OUTPUT.PUT_LINE(PNAME);
END;

  注意:

    1) 查询结果只能返回单条记录,多条或者0条都会返回异常。

    2) into语句必须是在select 和 from 字句之间。

    3)into所检索出的数据类型必须和变量的类型一致。

    4) into后赋值变量的个数必须和select查询出的变量个数一致。

  如果使用命令行执行PL-SQL代码块,使用/表示执行代码块,然后通过 set serveroutput on;开启输出内容!

  c.一次对多个变量进行赋值,并且变量的类型使用表中的类型。

DECLARE
v_id NUMBER := &ID; --定义输入变量
v_name es_product.Name%TYPE; --定义变量,和es_product.name的类型一致
v_price es_product.Price%TYPE;
BEGIN
SELECT p.name,p.price
 INTO v_name, v_price
 FROM es_product p
 WHERE ID=v_id; --对多个变量进行赋值,这里只能返回单条记录。
DBMS_OUTPUT.PUT_LINE('id:' || v_id || 'name:' || v_name || 'price:' || v_price); --输出内容
END;

  d.定义数据行,使用数据行可以保存多个变量的值。以一个整体保存一条记录的列的信息。(类似对象的方式)

DECLARE
v_id NUMBER := &ID;
v_row es_product%ROWTYPE; --定义变量,es_product.rowtype为esproduct的行类型
BEGIN 
  SELECT p.name,p.price
  INTO v_row.name, v_row.price
  FROM es_product p
  WHERE ID=v_id;
  DBMS_OUTPUT.PUT_LINE('id:' || v_id || 'name:' || v_row.name || 'price:' || v_row.price);
END;

四、常量的声明和使用

在Oracle中当有一些值不想被修改的情况下,可以声明为常量。

语法:  

  常量名 CONSTANT 常量类型 := 初始值。

DECLARE
C_MSG CONSTANT VARCHAR2(20) := '常量的值';
BEGIN
C_MSG := 'aaa';
END;

声明常量C_MSG为字符串类型,如果在程序过程中如果修改常量的值,则会抛出异常。

Oracle基础 PL-SQL编程基础(1) 变量和常量的更多相关文章

  1. Oracle数据库编程:PL/SQL编程基础

    2.PL/SQL编程基础: PL/SQL块:        declare        定义部分        begin        执行部分        exception        异 ...

  2. 【PL/SQL编程基础】

    [PL/SQL编程基础]语法: declare 声明部分,例如定义变量.常量.游标 begin 程序编写,SQL语句 exception 处理异常 end: / 正斜杠表示执行程序快范例 -- Cre ...

  3. PL/SQL编程基础

    1. PL/SQL块的基础结构 DECLARE /* * 定义部分——定义常量.变量.复杂数据类型.游标.用户自定义异常 */ BEGIN /* * 执行部分——PL/SQL语句和SQL语句 */ E ...

  4. Oracle Pl/SQL编程基础

    Pl/SQL简介 提高应用程序的运行性能, 提供模块化的程序设计, 自定义标示符, 具有过程语言控制结构, 良好的兼容性, 处理运行错误. Pl/SQL语言基础 sql是关系数据库的基本操作语言. s ...

  5. PL/SQL编程基础(三):数据类型划分

    数据类型划分 在Oracle之中所提供的数据类型,一共分为四类: 标量类型(SCALAR,或称基本数据类型) 用于保存单个值,例如:字符串.数字.日期.布尔: 标量类型只是作为单一类型的数据存在,有的 ...

  6. Oracle之PL/SQL编程

    PL/SQL(Procedural Language/SQL,过程语言/SQL) 是结合了Oracel过程语言和结构化查询语言(SQL)的一种扩展语言. 优点: (1)PL/SQL具有编程语言的特点, ...

  7. PL/SQL编程基础(二):变量的声明、赋值、(赋值、连接、关系、逻辑)运算符

    变量的声明.赋值.运算符 1.声明并使用变量 变量可以在声明时赋值,也可以先定义后赋值: 使用%TYPE与%ROWTYPE可以根据已有类型定义变量. PL/SQL是一种强类型的编程语言,所有的变量都必 ...

  8. oracle PL/SQL编程基础知识

    在oracle中使用pl/sql来扩展SQL的功能,使得SQL能够更加的灵活,功能更加强大,效率更高.pl/sql让sql也能执行判断,循环等操作.主要记录一下pl/sql的基本语法和基本条件判断语句 ...

  9. Oracle PL/SQL 编程基础 实例

    create table mytest(name varchar(20),password varchar(30)); create or replace procedure sp_pro2 is  ...

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

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

随机推荐

  1. ZOJ 3596Digit Number(BFS+DP)

    一道比较不错的BFS+DP题目 题意很简单,就是问一个刚好包含m(m<=10)个不同数字的n的最小倍数. 很明显如果直接枚举每一位是什么这样的话显然复杂度是没有上限的,所以需要找到一个状态表示方 ...

  2. 在CentOS 5.8上搭建PPTP VPN服务

    在天朝上网,vpn已经是必备之物了,我也记录一下搭建vpn服务的方法. 1. 确认内核是否支持MPPE模块MPPE用来支持Microsoft Point to Point Encryption, 包括 ...

  3. 创建维护计划时,提示“代理XP”组件已作为此服务器安全配置的一部分被关闭

    一.问题在Management Studio中新建维护计划时,提示以下错误信息:“代理XP”组件已作为此服务器安全配置的一部分被关闭.系统管理员可以使用sp_configure来启用“代理XP”.有关 ...

  4. 为什么无法发起qq临时会话,必须添加好友?如何设置才能临时会话?

    (从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-06-03) 一. QQ等级低于10级不能进行临时会话 按照腾讯的设置,QQ等级如果低于10级(2个月亮+2颗星星),无法发起 ...

  5. 关于Java中的程序,进程和线程的详解...

    程序:一段静态的代码,一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体,是应用软件执行的蓝本. 进程:是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个 ...

  6. SetWindowsHookEx 相关

    SetWindowsHookEx function https://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85) ...

  7. constraint使用方法总结

    主要就是添加约束的 下面几种约束 .并 一一列举: 1.主键约束: 要对一个列加主键约束的话,这列就必需要满足的条件就是分空 由于主键约束:就是对一个列进行了约束,约束为(非空.不反复) 下面是代码  ...

  8. CSS的魔法和魅力

    其实我最开始学会的语言是HTML,我记得那还是大一的事情.当时我对床的兄弟DR放了一本HTML的书在床上,我因为没事就拿来看看.那本书大概只有50页左右,可是可以说如果没有这本书,今天Maybe我不会 ...

  9. IOS 7 Study - Displaying an Image on a Navigation Bar

    ProblemYou want to display an image instead of text as the title of the current view controlleron th ...

  10. CodeForces 173E Camping Groups 离线线段树 树状数组

    Camping Groups 题目连接: http://codeforces.com/problemset/problem/173/E Description A club wants to take ...