[最近学习]Oracle 9i - PL/SQL ,一

> 数据类型:

raw: 用来存储非结构化数据的变长字符数据,最大长2000bytes

long raw: 同raw,最大长2GB

blob: 非结构化的二进制数据,4GB : image

clob: 字符数据,4GB : text

nclob: Unicode字符数据,4GB : ntext

bfile: 用来把非结构化的二进制数据存储在数据库以外的操作系统文件中,4GB

oracle在数据库中只存储文件指针,实际的文件存储在操作系统的外部文件中

urowid: 用来存储表示任何类型列地址的二数据,可以是物理的,逻辑的或外部的

>> PL/SQL:

DECLARE //声明

maxrec CONSTANT INT := 200; //声明常量 (常量名 CONSTANT 类型:=值;)

i INT := 1; //声明变量

BEGIN

FOR i IN 1 .. maxrec LOOP //FOR循环

INSERT INTO sx_test

(test_id, test_name, test_body)

VALUES

(i,'Test Data','Test Data');

END LOOP;

dbms_output.put_line(i); //输出print

COMMIT; //执行(有事务的概念)

END;

1. 定义变量的类型:

1) %type: mydate SX_TEST.currentdate%type; 定义成此字段的类型

2) %rowtype: 获得整个记录的数据类型

区别: [变量名 数据表.列名%type]

[变量名 数据表%rowtype]

3) 定义一维表类型变量:type 表类型 is table of 类型 index by binary_integer;

4) 定义多维表类型变量:type 表类型 is table of 表名%rowtype index by binary_integer;

2. 表达式:

1) 数值表达式: + , - , * , / ,**(乘方)

2) 字符表达式:||

3) 关系表达式: <,>,=,like,in,<=,>=,!=,between

4) 逻辑表达式:not, or ,and (NOT > OR > AND)

3. 语句:

> if .. then .. end if

> if .. then .. else .. end if

> loop

..;

if .. then exit else .. end if;

end loop

> loop

..;

exit when .. ;

end loop;

> while .. loop

..;

end loop;

> for i in 上界..下界 loop

..

end loop

4. 游标 cursor

游标是从数据表中提取出来的数据,以临时表的形式存放在内存中, 在游标中有一个数据指针,利用fetch语句可以移动cursor,从而对cursor中的数据进行操作,然后将操作结果写回数据表中

1) 定义: cursor CURSOR_NAME is

SELECT 语句 //将游标指向某一个查询行,以备将来使用

2) 实例:

DECLARE

tmpSal sx_test.test_id%TYPE;

CURSOR myCursor IS

SELECT * FROM sx_test WHERE test_id > tmpSal;

curRec myCursor%rowtype;

BEGIN

tmpSal := 50;

OPEN myCursor;

if myCursor%isopen then -- %isopen是否打开,%found是否找到,%notfount是否没有找到,%rowcount返回游标的行数

FETCH myCursor into curRec;

dbms_output.put_line(to_char(curRec.test_name));

else

dbms_output.put_line('Cursor did not open!');

end if;

END;

A) OPEN打开curosr执行了两步动作:a.将符合条件的记录送入内存; b.将指针指向第一条记录

B) FETCH提取游标中的数据: fetch CURSOR_NAME into 变量名1,变量名2...(或,记录型变量名);

5. 异常 Exception

DECLARE EXC_NAME exception;

RAISE EXC_NAME; --触发异常处理

实例: Exception --异常段

WHEN EXC_NAME THEN --如果出现此异常

.. -- 则进行此异常处理;