方括号里的内容为可选项
大括号是必填
1PL/SQL结构块
DECLARE /* * 声明部分——定义常量、变量、复杂数据类型、游标、用户自定义异常 */ BEGIN /* * 执行部分——PL/SQL语句和SQL语句 */ EXCEPTION /* * 异常处理部分——处理运行异常 */ END; /*块结束标记 */
2 创建序列
1 CREATE SEQUENCE [ schema. ] sequence_name 2 [ { INCREMENT BY | START WITH } integer 3 | { MAXVALUE integer | NOMAXVALUE } 4 | { MINVALUE integer | NOMINVALUE } 5 | { CYCLE | NOCYCLE } 6 | { CACHE integer | NOCACHE } 7 | ... 8 ]... 9 ;
- schema:模式,即用户名称
- sequence_name:序列名称
- INCREMENT BY:定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
- START WITH:定义序列的初始值,默认为1。
- MAXVALUE:序列生成器能产生的最大值。NOMAXVALUE是默认选项,代表没有最大值定义。
- MINVALUE:序列生成器能产生的最小值。NOMINVALUE是默认选项,代表没有最小值定义。
- CYCLE和NOCYCLE:当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值,最小值为1。对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
- CACHE:定义存放序列的内存块的大小,默认为20,相当于预加载。缓冲部分序列计数以便更快获取序列值,可以改善序列的性能,但缓存选项可能会造成数据丢失。NOCACHE表示不缓冲
3 删除序列
1 DROP SEQUENCE [ schema. ] sequence_name ;
4 修改序列
1 ALTER SEQUENCE [ schema. ] sequence_name 2 { INCREMENT BY integer 3 | { MAXVALUE integer | NOMAXVALUE } 4 | { MINVALUE integer | NOMINVALUE } 5 | { CYCLE | NOCYCLE } 6 | { CACHE integer | NOCACHE } 7 | ... 8 } ... 9 ;
注意,不能修改序列的初始值,否则会报ORA-02283。如果需要修改初始值,先删除序列再重新创建序列设定初始值。
复合数据类型
5.1. 记录(Record)
1 TYPE record_name IS RECORD( 2 varable1 data_type1 [NOT NULL] [:= default_value ], 3 varable2 data_type2 [NOT NULL] [:= default_value ], 4 ......, 5 varablen data_typen [NOT NULL] [:= default_value ] 6 );
5.2. 表(TABLE)
5.2.1. 索引表
1 TYPE table_name IS TABLE OF element_type [NOT NULL] 2 INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARCHAR2];
5.2.2 嵌套表
1 TYPE type_name IS TABLE OF element_type;
5.3. 数组(VARRAY)
1 TYPE varray_name IS VARRAY(size) OF element_type [NOT NULL];
6 显式游标
6.1声明/定义游标
1 CURSOR cursor_name 2 [(parameter_dec [, parameter_dec ]…)] 3 [RETURN datatype] 4 IS 5 select_statement;
6.2 打开游标
1 OPEN cursor_name [ ( cursor_parameter [ [,] actual_cursor_parameter ]... ) ]
6.3读取数据
1 FETCH { cursor | cursor_variable | :host_cursor_variable } 2 { into_clause | bulk_collect_into_clause [ LIMIT numeric_expression ] } ;
6.4 关闭游标
1 CLOSE cursor_name;
7 游标FOR循环
1 FOR index_variable IN cursor_name[(value[, value]…)] LOOP 2 -- 游标处理语句 3 END LOOP;
8条件结构
1. 简单IF结构
1 -- 简单IF结构 2 IF <布尔表达式> THEN 3 满足条件时执行的语句 4 END IF;
2. IF-ELSE结构
1 -- IF-ELSE结构 2 IF <布尔表达式> THEN 3 满足条件时执行的语句 4 ELSE 5 不满足条件时执行的语句 6 END IF;
3 多重IF
1 -- 多重IF 2 IF <布尔表达式1> THEN 3 满足条件1时执行的语句 4 ELSIF <布尔表达式2> THEN 5 满足条件2时执行的语句 6 ELSIF <布尔表达式3> THEN 7 满足条件3时执行的语句 8 ELSE 9 满足条件1、2、3均不满足时执行的语句 10 END IF;
注意:ELSIF
不能写成ELSEIF
9 CASE
语法一
1 CASE 条件表达式 2 WHEN 条件表达式结果1 THEN 3 语句1 4 WHEN 条件表达式结果2 THEN 5 语句2 6 ...... 7 WHEN 条件表达式结果n THEN 8 语句n 9 [ELSE 条件表达式结果] 10 END CASE;
语法二
1 CASE 2 WHEN 条件表达式1 THEN 3 语句1 4 WHEN 条件表达式2 THEN 5 语句2 6 ...... 7 WHEN 条件表达式n THEN 8 语句n 9 [ELSE 语句] 10 END CASE;
10 循环结构
简单循环
1 LOOP 2 循环体语句; 3 [EXIT WHEN <条件语句>] 4 END LOOP;
WHILE 循环
1 WHILE <布尔表达式> LOOP 2 循环体语句; 3 END LOOP;
FOR循环
1 [<<标签>>] 2 FOR 循环计数器 IN [ REVERSE ] 下限 .. 上限 LOOP 3 循环体语句; 4 END LOOP [<<标签>>];
未完 在更新中。。。
时间: 2024-10-24 04:50:35