PL/SQL基础

一、什么是PL/SQL?

PL/SQL(Procedural Language/Structure Query Language) 是Oracle对标准sql规范扩展,它全面支持SQL的数据操作、事务控制等。

二、PL/SQL编写规则

1.标识符命名规则

1)变量,建议使用v_作为前缀,如v_sal、v_job等

2)常量,建议使用c_作为前缀,如c_rate。

3)游标,建议使用_cursor作为后缀,如emp_cursor

4) 异常,建议使用e_作为前缀,如e_integrity_error

5)当定义PL/SQL表类型时,建议使用_table_type作为后缀,如sql_table_type

6)当定义PL/SQL表变量时,建议使用_table作为后缀,如sal_table

7)当定义PL/SQL记录类型时,建议使用_record_type作为后缀,如emp_record_type

8)当定义PL/SQL记录变量时,建议使用_record作为后缀,如emp_record

2.大小写规则

1)SQL关键字采用大写格式,如SELECT UPDATE SET WHERE

2)PL/SQL关键字采用大写格式,如DECLARE BEGIN END等

3)数据类型采用大写格式,如INT VARCHAR2  DATE

4)标识符合参数采用小写格式,如v_sal c_rate等

5)数据库对象和列采用小写格式,如emp sal ename等

三、PL/SQL编程结构

1、PL/SQL程序块的基础结构

DECLARE

-- 声明部分  :用来定义变量 初始化变量等

BEGIN

-- 执行部分  用来执行查询等操作部门

EXCEPTION

--用来处理异常部分

END;

/

1)声明部门:主要用来声明变量,常量,数据类型,游标,异常处理名称以及局部子程序定义等,这个部分是由DECLARE开始的

2)执行部门:这部分通过变量赋值、流程控制、数据查询,数据操纵、数据定义等实现功能,由关键字BEGIN开始。

3)异常处理部分:处理异常或者错误

4)/ :PL/SQL程序块需要使用正斜杠(/)结尾,才能执行。

注意点:

执行部分是必须的,声明部分和异常部分是可选的

每个PL/SQL都是由BEGIN/DECLARE开始的,已END结束的

 每条语句都必须以分号结束,sql语句可以是多行的,但是分号表示该语句的结束;另外一行中也可以有多条sql语句,他们之间以分号分隔。

示例代码:

DECLARE

a NUMBER(4);  --  声明一个变量

BEGIN

 a:=1+2;

DBMS_OUTPUT.PUT_LINE(‘1+2=‘||a);--输出变量值

EXCEPTION   --异常处理

WEHN OTHERS THEN

DBMS_OUTPUT.PUT_LINE(‘出现异常‘);

END;

/

解释说明:DBMS_OUTPUT是oracle提供的系统包,PUT_LINE是该包所包含的过程,用于输出字符串信息。在使用DBMS_OUTPUT包输出数据或消息时,必须要将SQL*PLUS的环境变量SERVEROUT设置为ON

2.PL/SQL数据类型

对于PL/SQL程序来说,它的常量和变量的数据类型,除了使用与SQL相同的数据类型,还有特定类型

BOOLEAN                              取值true false 或null

BINARY_INTEGER                带符号整数

NATURAL                               BINARY_INTEGER的子类型,表示非负整数

NATURALN                             BINARY_INTEGER的子类型,不为null的非负整数

POSITIVE                               BINARY_INTEGER的子类型 , 表示正整数

POSITIVEN                             BINARY_INTEGER的子类型 ,表示不为null的正整数

SIGNTYPE                              BINARY_INTEGER的子类型 ,取值为-1、0或1

PLS_INTEGER                       PLS_INTEGER是专为PL/SQL程序使用的数据类型,它不可以在创建的表的列使用。PLS_INTEGER比NUMBER变量更小的表示范围,占用                       小。PL_INTEGER更有利于利用CPU

SIMPLE_INTEGER      11G新增类型,BINARY_INTEGER的子类型,取值范围与BINARY_INTEGER相同,但不能为null值。在使用时如果内存溢出不会触发

异常,只会简单截断结果。

STRING          与VARCHAR2相同

RECORD         一组其他类型的组合

REF CURSOR                        指向一个行级的指针

3.变量和常量

1)

最常用的变量是标量变量。

variable_name   data_type [not null :=default  value];

variable_name 变量名称

not null :可以对变量定义非空约束,如果使用了此选项,必须为变量赋值,并且在程序其他地方不能讲变量修改为空

例子:

定义一个变量并给这个变量赋值为200

declare
   v_num number(4);
begin
   v_num:=200;
   DBMS_OUTPUT.put_line(‘变量值为:‘||v_num);
end;
/

定义一个类型为NUMBER的变量v_num,并赋值为200,然后使用DBMS_OUT.put_line过程输出v_num变量的值

2)常量

constant_name constant data_type {:=default}value;

constant_name 常量名

constant 定义常量的修饰符

data_type 常量的数据类型

:=|default 常量赋值,其中:=赋值操作符  冒号与等号之间不能有空格。

示例:

declare
   v_num constant number(4):=500;
begin
   DBMS_OUTPUT.put_line(‘常量值为:‘||v_num);
end;
/

4、复合数据类型

复合数据类型主要由三种:%type  %ROWTYPE  以及自定义记录类型

1)%TYPE类型

有时候使用表中的数据给变量赋值,首先需要知道变量所对应类数据类型,否则无法确定变量的数据类型。使用%type可以解决这,%type用于隐式将变量的数据类型指定为对应列的数据类型。

格式:

var_name  table_name.cloumn_name%type[not null]{:=|default}value

var_name 变量名

table_name 表名

cloumn_name 表中要赋值给变量的数据的数据列的名字

//使用%type关键字声明变量类型v_name和v_deptno,并从employess表中查询编号为200的员工姓名和部门编号

declare
  v_name employess.name%type;
  v_deptno employess.department_id%type;
  begin
    select name ,department_id into v_name,v_deptno
    from employess where employe_id=200;
  end;
  /
  

2)记录类型

记录类型是将一组逻辑类型相关的数据作为一个单元存储起来,记录类型可以理解为将多个类型的变量封装起来定义一个类型叫做记录类型的变量 然后使用相当于java类

,对象有多个属性,通过类名.属性名调用。但是必须包括一个普通的变量或者记录数据类型的成员。使用记录类型变量要先定义一个记录类型机构的变量(通俗的理解就是先定义一个记录类型的结构,),然后才可以声明一个记录类型的变量。定义记录类型必须使用type语句,在语句中指出将在记录中包含的字段以及数据类型。

语法:

type record_name is record(

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

field2_name data_type[not null] [:=default_value]; 

)

record_name  自定义记录数据类型名称,如number

field1_name 记录数据类型中的字段名

data_type:该字段的数据类型

示例:

定义一个名record_my_type的记录类型,该记录类型由字符串的v_name和整数的v_age变量组成,变量名为re_person

declare
  -- 定义了一个记录数据类型结构的类型(相当于普通类型的number这种)
  type record_my_type record(
       v_name varchar,
       v_age  number;
  )
  --声明记录类型变量
  re_person  record_my_type;
  begin
     select name,age into re_person from tb_person  where id=100;
     DBMS_OUTPUT.put_line(‘姓名:‘||re_person.v_name);
     DBMS_OUTPUT.put_line(‘年龄:‘||re_person.v_age);
  end;
  /

原文地址:https://www.cnblogs.com/lwdmaib/p/9160857.html

时间: 2024-10-31 12:54:47

PL/SQL基础的相关文章

Oracle实践--PL/SQL基础之同义词和序列

PL/SQL基础入门之同义词和序列             PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 同义词: /*     同义词:现有对象的一个别名:    

Oracle实践--PL/SQL基础之表分区

PL/SQL基础入门之表分区 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ---------------------------------------------

Oracle实践--PL/SQL基础之代码块

PL/SQL基础入门之代码块 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. 优点: 1.       支持SQL,可以使用:DML,DCL,游标控制和SQL运算符 2

Oracle实践--PL/SQL基础之游标

PL/SQL基础入门之游标 PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. ----------------------------------------------

Oracle实践--PL/SQL基础之视图和索引

PL/SQL基础入门之视图和索引         PL/SQL:过程语言(Procedure  Language)和结构化语言(Structured Query Language)结合而成的编程语言,是对SQL的扩展,支持多种数据类型,如大对象和集合类型,可使用条件和循环等控制语句,可创建存储过程,程序包和触发器等,给sql语句的执行添加程序逻辑,与Oracle服务器和Oracle工具紧密集成,具有可移植性,灵活性和安全性. -----------------------------------

PL/SQL 基础知识简介

1.PL/SQL代码块 PL/SQL 代码块是指令的集合,支持所有的DML,NDS,DBMS_SQL,DDL. :DML 是数据操纵语言(Data Manipulation Language)包括,Insert ,update,delete : DDL是数据定义语言(Data Definition Language ),包括,Alter,create,drop,truncate,Grant,revoke : NDS本地动态SQL(Native Dynamic SQL) 2.PL/SQL代码块结构

Oracle实践--PL/SQL基础之存储过程

PL/SQL基础之存储过程 存储过程:过程是用于完成特定任务的子程序(代码的集合) /* 子程序的优点:1.模块化,将程序分解为逻辑模块: 2.可重用性,可以被任意数目的程序调用: 3,可维护性,简化维护操作: 4.安全性:通过设置权限,使数据更安全 */ --存储过程1,打印HelloWorld create or replace procedure my_pro is --用于声明一些变量 v_string varchar2(20) :='helloworld!'; begin dbms_o

Oracle实践--PL/SQL基础之函数

PL/SQL基础之函数 /* 函数:可以有返回值得命名的PL/SQL子程序,必须有返回值 关键字:function return */ --函数1 create or replace function helloworld return varchar2--指定返回类型,不能给定长度 as v_hello varchar2(50); begin v_hello :='helloworld!'; return v_hello;--不可少的return end; --函数调用方式: select h

Oracle实践--PL/SQL基础之触发器和程序包

PL/SQL基础之触发器和程序包  程序包 /* 程序包:对相关存储过程,函数,变量,游标和异常等对象的封装 有声明和主体组成 优点:1.模块化:2.更轻松的应用程序设计;3.信息隐藏;4.性能更佳 */ --程序包的声明:关键字:package is end create or replace package my_pack as procedure packageTest(v_num number); end my_pack;--也可以是 end; --程序包的主体 create or re

PL/SQL 基础知识

pl/sql中的四种循环 loop  exit when c_page >10; c_page := c_page+1; dbms_output.put_line('c_page : ' || c_page); end loop; while c_page<20 loop c_page := c_page+1; dbms_output.put_line('c_page : ' || c_page); end loop; <<repeat_loop>> dbms_outp