`
liss
  • 浏览: 825118 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

《oracle 9i从入门到精通读书笔记2》

阅读更多
第二章: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;

本文出自 “achilles” 博客,请务必保留此出处http://orajc.blog.51cto.com/458434/94566

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics