来杭州学习半年多了!今天终于讲到以前关注的ORACLE PL/SQL存储过程! 整理一下上课敲的代码:
先了解要用到的知识
1.variable(变量
语法:
var_name var_type[CONSTANT][NOT NULL][:= value];
DECLARE
v_fname VARCHAR2(50);
为了保障变量与DB中TABLE 的Column数据类型的同一性,要用:
2.%TYPE
语法:
DECLARE
v_fname s_emp.FIRST_NAME%TYPE;
但如果声明太多的话!可累人了,还好有:
3.RECORD
语法:
TYPE record_name IS RECORD(
field1 type1 [NOT NULL][:= expression1],
...
fieldN typeN [NOT NULL][:= expressionN]
);
DECLARE
TYPE s_TT IS RECORD(
s_id s_emp.ID%TYPE,
....
s_sal s_emp.SALARY%TYPE
)
--以上自定义了一个类型,下面用该类型作自定义变量的类型
s_temp s_TT;
一个表如果有很多字段,那要敲... :(, ORACLE想的也挺多:
4.ROWTYPE
返回一个基于DB中表定义的类型(一行的所有字段)
DECLARE
v_temp s_emp%ROWTYPE;
5.TABLE
与一个MAP<int,T>集合类似,用来保存可用的数据
语法:
TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER;
DECLARE
TYPE t_temp IS TABLE OF s_emp%ROWTYPE INDEX BY BINARY INTEGER;
用t_temp作为类型来声明一个变量
v_table t_temp;
BEGIN
SELECT *
INTO v_table(-2)
FROM s_emp
WHERE ID=1;
END;
-2是ID=1的记录保存在v_table中的索引位置,该索引的值不能超过BINARY INTEGER的取值范围:正负2147483647.索引可以是这个范围内的任意值
先了解要用到的知识
1.variable(变量
语法:
var_name var_type[CONSTANT][NOT NULL][:= value];
DECLARE
v_fname VARCHAR2(50);
为了保障变量与DB中TABLE 的Column数据类型的同一性,要用:
2.%TYPE
语法:
DECLARE
v_fname s_emp.FIRST_NAME%TYPE;
但如果声明太多的话!可累人了,还好有:
3.RECORD
语法:
TYPE record_name IS RECORD(
field1 type1 [NOT NULL][:= expression1],
...
fieldN typeN [NOT NULL][:= expressionN]
);
DECLARE
TYPE s_TT IS RECORD(
s_id s_emp.ID%TYPE,
....
s_sal s_emp.SALARY%TYPE
)
--以上自定义了一个类型,下面用该类型作自定义变量的类型
s_temp s_TT;
一个表如果有很多字段,那要敲... :(, ORACLE想的也挺多:
4.ROWTYPE
返回一个基于DB中表定义的类型(一行的所有字段)
DECLARE
v_temp s_emp%ROWTYPE;
5.TABLE
与一个MAP<int,T>集合类似,用来保存可用的数据
语法:
TYPE tabletype IS TABLE OF type INDEX BY BINARY_INTEGER;
DECLARE
TYPE t_temp IS TABLE OF s_emp%ROWTYPE INDEX BY BINARY INTEGER;
用t_temp作为类型来声明一个变量
v_table t_temp;
BEGIN
SELECT *
INTO v_table(-2)
FROM s_emp
WHERE ID=1;
END;
-2是ID=1的记录保存在v_table中的索引位置,该索引的值不能超过BINARY INTEGER的取值范围:正负2147483647.索引可以是这个范围内的任意值