PL/SQL 程序设计简介



①PL/SQL 程序设计简介

PL/SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,

所以PL/SQL代码可以对数据进行快速高效的处理

在PL/SQL中可以使用的SQL语句有:

INSERT,UPDATE,DELETE,SELECT …INTO,COMMIT,ROLLBACK,SAVEPOINT。

提示:在PL/SQL中只能用SQL语句中的DML 部分,不能用DDL 部分,如果要在PL/SQL中使用DDL(如CREATE  table  等)的话,只能以动态的方式来使用

②PL/SQL块结构和组成元素

PL/SQL程序由三个块组成,即声明部分、执行部分、异常处理部分

PL/SQL块的结构如下:

DECLARE

/* 声明部分: 在此声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数*/

BEGIN

/*  执行部分:  过程及SQL 语句, 即程序的主要部分*/

EXCEPTION

/* 执行异常部分: 错误处理*/

END;

其中执行部分是必须的。

PL/SQL块可以分为三类:

1. 无名块:动态构造,只能执行一次。

2. 子程序:存储在数据库中的存储过程、函数及包等。当在数据库上建立好后可以在其它程序中调用它们。

3. 触发器:当数据库发生操作时,会触发一些事件,从而自动执行相应的程序。

③标识符

PL/SQL程序设计中的标识符定义与SQL 的标识符定义的要求相同。要求和限制有:

标识符名不能超过30字符;

第一个字符必须为字母;

不分大小写;

不能用’-‘(减号);

不能是SQL保留字。

提示:  一般不要把变量名声明与表中字段名完全一样,如果这样可能得到不正确的结果

建议的命名方法:

标识符         命名规则  例子

程序变量 V_name          V_name

程序常量 C_Name          C_company_name

游标变量 Name_cursor  Emp_cursor

异常标识 E_name          E_too_many

表类型         Name_table_type  Emp_record_type

表         Name_table  Emp

记录类型 Name_record  Emp_record

替代变量 P_name          P_sal

绑定变量 G_name          G_year_sal

④变量类型

除了CHAR、VARCHAR2、BINARY_INTEGER、NUMBER(p,s)、LONG、DATE、BOOLEAN、ROWID、ROWID这些

还有复合类型

ORACLE 在PL/SQL 中除了提供象前面介绍的各种类型外,还提供一种称为复合类型的类型---记录和表

1)记录类型

记录类型是把逻辑相关的数据作为一个单元存储起来,称作PL/SQL RECORD 的域(FIELD),其作用是存放互不相同但逻辑相关的信息。

定义记录类型语法如下:

TYPE record_type IS RECORD(

Field1 type1  [NOT NULL]  [:= exp1 ],

Field2 type2  [NOT NULL]  [:= exp2 ],

. . .   . . .

Fieldn typen  [NOT NULL]  [:= expn ] ) ;

例:

1 自定义记录类型

declare

--定义一个记录类型

type customer_type is record(

v_cust_name varchar2(20),

v_cust_id number(10));

--声明自定义记录类型的变量

v_customer_type customer_type;

begin

v_customer_type.v_cust_name := ‘刘德华‘;

v_customer_type.v_cust_id := 1001;

dbms_output.put_line(v_customer_type.v_cust_name||‘,‘||v_customer_type.v_cust_id);

end;

2 自定义记录类型

declare

--定义一个记录类型

type emp_record is record(

v_name varchar2(25),

v_email varchar2(25),

v_salary number(8, 2),

v_job_id varchar2(10));

--声明自定义记录类型的变量

v_emp_record emp_record;

begin

--通过 select ... into ... 语句为变量赋值

select last_name, email, salary, job_id into v_emp_record

from employees

where employee_id = 186;

-- 打印变量的值

dbms_output.put_line(v_emp_record.v_name || ‘, ‘ || v_emp_record.v_email || ‘, ‘ ||

v_emp_record.v_salary || ‘, ‘ ||  v_emp_record.v_job_id);

end;

4. 使用 %type 定义变量,动态的获取数据的声明类型

declare

--定义一个记录类型

type emp_record is record(

v_name employees.last_name%type,

v_email employees.email%type,

v_salary employees.salary%type,

v_job_id employees.job_id%type);

--声明自定义记录类型的变量

v_emp_record emp_record;

begin

--通过 select ... into ... 语句为变量赋值

select last_name, email, salary, job_id into v_emp_record

from employees

where employee_id = 186;

-- 打印变量的值

dbms_output.put_line(v_emp_record.v_name || ‘, ‘ || v_emp_record.v_email || ‘, ‘ ||

v_emp_record.v_salary || ‘, ‘ ||  v_emp_record.v_job_id);

end;

5. 使用 %rowtype

declare

--声明一个记录类型的变量

v_emp_record employees%rowtype;

begin

--通过 select ... into ... 语句为变量赋值

select * into v_emp_record

from employees

where employee_id = 186;

-- 打印变量的值

dbms_output.put_line(v_emp_record.last_name || ‘, ‘ || v_emp_record.email || ‘, ‘ ||

v_emp_record.salary || ‘, ‘ ||  v_emp_record.job_id  || ‘, ‘ ||

v_emp_record.hire_date);

end;

2)PL/SQL 表(嵌套表)

PL/SQL 程序可使用嵌套表类型创建具有一个或多个列和无限行的变量, 这很像数据库中的表. 声明嵌套表类型的一般语法如下:

TYPE type_name IS TABLE OF

{datatype | {variable | table.column} % type | table%rowtype};

INDEX BY BINARY_INTEGER ;

语法说明如下:

--table_name  创建的表类型名称。

--IS TABLE  表示创建的是表类型。

--datatype  可以是任何合法的PL/SQL数据类型,例如varchar2。

--INDEX BY BINARY_INTEGER  指定系统创建一个主键索引,用于引用表类型变量中的特定行。

declare

type my_record_type is record(

v_id varchar2(32),

v_name varchar2(100)

);

type my_table_type is table of my_record_type

index by BINARY_INTEGER;

begin

dbms_output.put_line(‘11111111111111‘);

end;

方法 描述

EXISTS(n):Return TRUE if the nth element in a PL/SQL table exists;

COUNT:Returns the number of elements that a PL/SQL table currently contains;

FIRST\LAST:Return the first and last (smallest and lastest) index numbers in a PL/SQL table. Returns NULL if the PL/SQL table is empty.

PRIOR(n):Returns the index number that precedes index n in a PL/SQL table;

NEXT(N):Returns the index number that succeeds index n in a PL/SQL table;

TRIM:TRIM removes one element from the end of a PL/SQL table.

TRIM(n):removes n element from the end of a PL/SQL table.

DELETE:DELETE removes all elements from a PL/SQL table.

DELETE(n):removes the nth elements from a PL/SQL table.

DELETE(m, n):removes all elements in the range m to n from a PL/SQL table.

⑤变量赋值

variable  := expression;

variable 是一个PL/SQL变量, expression 是一个PL/SQL 表达式.

⑥字符及数字运算特点

空值加数字仍是空值:NULL + < 数字> = NULL

空值加(连接)字符,结果为字符:NULL || <字符串> = < 字符串>

⑦可转换的类型赋值

CHAR 转换为NUMBER:

使用TO_NUMBER 函数来完成字符到数字的转换,如:

v_total  := TO_NUMBER(‘100.0’) + sal;

NUMBER 转换为CHAR:

使用TO_CHAR函数可以实现数字到字符的转换,如:

v_comm := TO_CHAR(‘123.45’) || ’元’ ;

字符转换为日期:

使用TO_DATE函数可以实现字符到日期的转换,如:

v_date := TO_DATE(‘2001.07.03‘,‘yyyy.mm.dd‘);

日期转换为字符

使用TO_CHAR函数可以实现日期到字符的转换,如:

v_to_day := TO_CHAR(SYSDATE, ‘yyyy.mm.dd hh24:mi:ss‘) ;

⑧注释

在PL/SQL里,可以使用两种符号来写注释,即:

使用双‘-‘ ( 减号) 加注释:PL/SQL允许用–-来写注释,它的作用范围是只能在一行有效

使用/*   */  来加一行或多行注释:它的作用范围在多行有效

提示:被解释存放在数据库中的PL/SQL 程序,一般系统自动将程序头部的注释去掉。

只有在PROCEDURE 之后的注释才被保留;另外程序中的空行也自动被去掉。

时间: 2024-08-02 23:52:15

PL/SQL 程序设计简介的相关文章

[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下)

原文:[推荐]ORACLE PL/SQL编程详解之一:PL/SQL 程序设计简介(千里之行,始于足下) [推荐]ORACLE PL/SQL编程详解之一: PL/SQL 程序设计简介(千里之行,始于足下) ——通过知识共享树立个人品牌. 继上六篇: [顶]ORACLE PL/SQL编程详解之二:PL/SQL块结构和组成元素(为山九仞,岂一日之功) [推荐]ORACLE PL/SQL编程详解之三:PL/SQL流程控制语句(不给规则,不成方圆) [推荐]ORACLE PL/SQL编程之四:把游标说透(

Oracle数据库之PL/SQL程序设计简介

有利于客户/服务器环境应用的运行 对于客户/服务器环境来说,真正的瓶颈是网络上.无论网络多快,只要客户端与服务器进行大量的数据交换,应用运行的效率自然就回受到影响.如果使用PL/SQL进行编程,将这种具有大量数据处理的应用放在服务器执行,自然就省去了数据在网上的传输时间. 适合于客户环境 PL/SQL由于分为数据库PL/SQL部分和工具PL/SQL.对于客户端来说,PL/SQL可以嵌套到相应的工具中,客户端程序可以执行本地包含PL/SQL部分,也可以向服务发SQL命令或激活服务器端的PL/SQL

每周一书《Oracle 12 c PL(SQL)程序设计终极指南》

本周为大家送出的书是<Oracle 12 c PL(SQL)程序设计终极指南>,此书由机械工业出版社出版, 孙风栋,王澜,郭晓惠 著. 内容简介: <Oracle 12c PL/SQL程序设计终极指南>志在打造PL/SQL领域最为系统.全面.实战.权威的著作,通过一系列非常突出的优势在大量的同类书中脱颖而出,成为该领域的标准读物. PL/SQL本身涉及的知识点浩瀚.庞杂,初学者根本无法依靠自身能力理清头绪,学习成本极高.本书对知识点进行了体系化的梳理,化繁杂为有序,突出重点,直指核

oracle pl/sql 程序设计 历史笔记整理

20131016 周三 oracle pl/sql 程序设计 第2章 创建并运行pl/sql代码 sqlplus yjkhecc/[email protected]:1521/orcl 在java中调用存储过程: create or replace procedure t_p(l_in in out number) is begin l_in := 5; end; @Test public void test() throws SQLException { DataSource ds = Dat

oracle 学习笔记之PL/SQL程序设计

1.PL/SQL的定义: PL/SQL(Procedure Language/SQL) PLSQL是Oracle对sql语言的过程化扩展 指在SQL命令语言中增加了过程处理语句(如分支.循环等),使SQL语言具有过程处理能力. 把SQL语言的数据操纵能力与过程语言的数据处理能力结合起来,使得PLSQL面向过程但比过程语言简单.高效.灵活和实用. Plsql(oracle),Transact-sql(SQL server) 2.入门程序-->打印hello world; set serverout

2015/8/17笔记整理 第12章 PL/SQL编程简介1 块 过程 函数

Oracle数据库中包含一种过程化编程语言PL/SQL,PL/SQL是ORACLE对标准数据库语言的扩展. 一.PL/SQL的优点 PL/SQL 不是一个独立的产品,他是一个整合到ORACLE服务器和ORACLE工具中的技术,可以把PL/SQL看作ORACLE服务器内的一个引擎,sql语句执行者处理单个的sql语句,PL/SQL引擎处理PL/SQL程序块.当PL/SQL程序块在PL/SQL引擎处理时,ORACLE服务器中的SQL语句执行器处理pl/sql程序块中的SQL语句. PL/SQL语句—

PL/SQL程序设计、流程控制

PL/SQL是 Procedure Language & Structured Query Language 的缩写 PL/SQL是对SQL语言存储过程语言的扩展 PL/SQL程序由三个块组成,即声明部分.执行部分.异常处理部分. 在语句块的声明部分对变量声明,声明一个变量的语法是: variable_name [ constant ] type [ not null ] [:=value]其中: variable_name 为变量名 type 为类型 value 为变量的初值 PL/SQL结构

Oracle PL/SQL程序设计 第五版 上册 第三章 语言基础

最近看了很多东西,也练习了一些,我发现这东西好像有点进入瓶颈的感觉,这个瓶颈,我觉得是因为时间太短, 练习的还不够多,并且有很多东西都是随意带过弄的.并且最近在学习Python,有些东西还有点混淆了,我决定从新 来一遍这本书,把每一个例子都进行一个学习. PL/SQL块有匿名的,也有命名的,其实命名就是那些过程.函数.包.触发器.对象类型这些.书中第一个例子是这样的. insert.sql CREATE OR REPLACE PROCEDURE get_happy(emp_id_in IN NU

PL/SQL语法简介(匿名PL/SQL块)

PL/SQL PL/SQL是Oracle在关系数据库结构化查询语言SQL基础上扩展得到的一种过程化查询语言. SQL与编程语言之间的不同在于,SQL没有变量,SQL没有流程控制(分支,循环).而PL/SQL是结构化的和过程化的结合体,而且最为重要的是,在用户执行多条SQL语句时,每条SQL语句都是逐一的发送给数据库,而PL/SQL可以一次性将多条SQL语句一起发送给数据库,减少网络流量 SQL执行 PL/SQL执行 匿名Pl/SQL块 – 动态构造,只能执行一次 一次性完成,没有名字 存储过程,