专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

《Oracle9i PL/SQL 从入门到精通读书笔记2》

ins518 2024-11-14 16:56:19 技术文章 9 ℃ 0 评论

第二章:PL/SQL基础

2.1 PL/SQL程序结构

2.1.1 PL/SQL块的类型

所有的PL/SQL程序都是以块作为基本单位,以及都是由块组成的。

这些块可以是按顺序出现的,也可以是嵌套的

块可以根据其带名称和不带名称以及在数据库中的存储方式分为以下类型:

匿名块:只能执行一次,不能存储在数据库中

带名块:一种带标签的匿名块

子程序:可以存储在数据库中的过程,函数和包,可以多次执行,可以在外部的程序中显示调用

触发器:存储在数据库中的带名块,当相应的触发事件发生时触发器就被自动执行,触发器事件一般是针对特定的数据库表进行的DML语句,如INSERT,UPDATE,DELTE

<<I_Namedblock>>

DECLARE

v_num1 NUMBER := 1;

v_num2 NUMBER := 2;

v_str1 VARCHAR2 (30) := '你好!';

v_str2 VARCHAR2 (30) := '这是你第一次接触PL/SQL';

v_outputstr VARCHAR2 (30);

BEGIN

INSERT INTO test_table(ncolumn, vcolumn)VALUES (v_num1, v_str1);

INSERT INTO test_table(ncolumn, vcolumn)VALUES (v_num2, v_str2);

SELECT vcolumn INTO v_outputstr FROM test_table WHERE ncolumn = v_num1;

DBMS_OUTPUT.put_line (v_outputstr);

SELECT vcolumn INTO v_outputstr FROM test_table WHERE ncolumn = v_num2;

DBMS_OUTPUT.put_line (v_outputstr);

END I_Namedblock;

带名块就是在匿名块前面加上一个标签

把DECLARE关键字 变成 CREATE OR REPLACE PROCEDURE 就变成了存储过程

CREATE OR REPLACE PROCEDURE 过程名 IS

2.1.2 PL/SQL块的结构

所有块都包含3个部分:声明部分,执行部分,异常处理部分

DECLARE

v_ncolumn NUMBER :=6;

v_vcolumn VARCHAR2(30);

BEGIN

SELECT v_column INTO v_vcolumn FROM test_table WHERE ncolumn=v_ncolumn;

EXCEPTION

WHEN NO_DATA_FOUND THEN

DBMS_OUTPUT.PUT_LINE('没有找到匹配的数据');

END;

在过程和函数中声明变量是不需要DECLARE的,但在声明TRIGGER中的变量是必须要有DECLARE

如果块中不需要声明变量,类型和游标时,声明部分可以省略

执行部分是不可缺少的,一般以BEGIN开始 END结束。END关键字必须是分号结束的

2.1.3 词法单位

e代表乘以10的多少次幂

2.2 变量声明

Variable_name [CONSTANT] type [NOT NULL][:=value | DEAFULT value]

Variable_name是变量名

CONSTANT 声明的是一个常量

Type 是类型

NOT NULL 可选,表示不能为空

:=value | DEAFULT value表示赋值

缺省的变量会被初始化为NULL

不能把NULL付给一个定义为NOT NULL的变量acct_id INTEGER(5) NOT NULL;这样是不允许的

在NATURAL和POSITIVEN,他们被预先定义为NOT NULL

每行只能声明一个变量,这和其他语言不同

BEGIN END;是可以嵌套的

2.3 变量类型

4中标量类型(数字类型,布尔型,字符型,日期型)

复合型

引用型

LOB型

数字型的三种基本类型:BINARY_INTEGER,NUMBER,PLS_INTEGER

字符型:CHAR,VARCHAR2,LONG和LONG RAW,RAW,ROWID和UROWID

LOB类型:BFILE,BLOB,CLOB,NCLOB

布尔类型:BOOLEAN(TRUE,FALSE,NULL)

日期时间类型:DATE,TIMESTAMP,TIMESTAMP WITH TIME ZONE,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL YEAR TO MONTH,INTERVAL DAY TO SENCOND

复合类型:记录,表,数组

引用类型:REF CURSOR 和ref object_type

用户自定义类型

2.4 数据类型转换

显式转换,可以使用内置函数

隐式转换,隐式转换不是好的习惯,可能会影响效率,结果可能不可预料

2.5 表达式

表达式是由操作符和运算符的结合

CASE 表达式

CASE SELECTOR

WHEN express THEN result1

WHEN express THEN result3

WHEN express THEN result2

END;

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表