标签:exception 输出变量 上下 iso poi cti parameter bms 控制
PL/SQL(Procedural Language/SQL,过程化SQL语言),是一种高级数据库程序设计语言,专门用于在各种环境下对ORACLE数据库进行访问。由于该语言集成于数据库服务器中,所以PL/SQL代码可以对数据进行快速高效的处理。
PL/SQL块:声明部分+执行部分+异常处理部分
-- 单行注释
DECLARE
/* 声明部分:声明变量,类型、游标、局部存储过程和函数 */
BEGIN
/* 执行部分:执行过程和SQL语句 */
[EXCEPTION]
/* 异常处理部分 */
END;
标识符 | 命名规则 |
---|---|
程序变量 | V_name |
程序常量 | C_Name |
游标变量 | Name_cursor |
异常标识 | E_name |
表类型 | Name_table_type |
表 | Name_table |
记录类型 | Name_record |
number,char,varchar2,long,date
记录类型:把逻辑相关的数据作为一个单元存储起来,用于存放互不相同但逻辑相关的信息。
TYPE record_type IS RECORD(
Field1 type1 [NOT NULL] [:= exp1 ],
Field2 type2 [NOT NULL] [:= exp2 ],
. . . . . .
Fieldn typen [NOT NULL] [:= expn ] ) ;
%TYPE类型:指某个已定义变量的数据类型类型,或数据表中某列的数据类型。
使用%TYPE特性的优点:
%RowType类型:返回一个与数据库表的数据结构一致的记录类型。
使用%ROWTYPE特性的优点:
赋值运算符::=
关系运算符:=>
上下限运算符:..
IF <条件语句1> THEN
语句1;
ELSIF <条件语句2> THEN
语句2;
ELSE
语句3;
END IF;
注意是
ELSIF
不是;ELSEIF
CASE <变量>
WHEN <值1> THEN <结果1>
WHEN <值2> THEN <结果1>
...
WHEN <值N> THEN <结果N>
[ELSE <结果N+1>]
END;
LOOP
循环语句;
EXIT WHEN <条件语句>
END LOOP;
WHILE <条件语句> LOOP
循环语句;
END LOOP;
FOR <循环计数器> IN [REVERSE] <下限> .. <上限> LOOP
循环语句;
END LOOP;
定义标号:<<标号名>>
;
GOTO语句:GOTO 标号名
;
NULL语句:不做任何事,增强代码可读性。
EXCEPTION
WHEN <异常1> THEN <异常处理代码>
WHEN <异常2> THEN <异常处理代码>
WHEN OTHERS THEN <异常处理代码>
为了处理 SQL 语句,Oracle 会分配一片叫上下文 (context area) 的区域来处理所必需的信息,即系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。游标就是一个指向上下文的句柄或指针。
显式游标主要是用于对查询语句的处理,尤其是查询结果为多条记录的情况。
①定义游标:定义游标名及对应的 SELECT 查询
CURSOR cursor_name (参数1 参数类型,参数2 参数类型...) IS
SELECT查询块;
数据类型不能使用长度约束。
②打开游标:执行游标的 SELECT 查询,将查询结果放入缓冲区,并指向缓冲区首部。
OPEN cursor_name (参数1 => 值,参数2 => 值...);
③提取游标数据:检索结果集中的数据行,放入指定输出变量中。
FETCH cursor_name INTO {variable_list | record_variable };
④关闭游标:释放游标占用的系统资源。
CLOSE cursor_name;
游标属性 | 描述 |
---|---|
%FOUND |
布尔型,当最近一次读记录时成功返回,则值为TRUE |
%NOTFOUND |
布尔型,当最近一次读记录时返回失败,则值为TRUE |
%ISOPEN |
布尔型,当游标已打开时返回 TRUE |
%ROWCOUNT |
数值型,返回已从游标中读取的记录数 |
FOR 索引 IN 游标[值1,值2...] LOOP
循环语句;
END LOOP;
隐式游标主要用于数据更新操作。隐式游标的名字为SQL
,由Oracle系统提供,无需用户处理。
游标属性 | 描述 |
---|---|
SQL%FOUND |
布尔型,当最近一次读记录时成功返回,则值为TRUE |
SQL%NOTFOUND |
布尔型,当最近一次读记录时返回失败,则值为TRUE |
SQL%ISOPEN |
布尔型,当游标已打开时返回 TRUE |
SQL%ROWCOUNT |
数值型,返回已从游标中读取的记录数 |
存储过程用于执行特定操作,无返回值;函数用于执行复杂操作,有返回值;存储函数与函数统称为PL/SQL子程序。
存储过程:执行特定操作,无返回值,多用于更新操作。
CREATE [OR REPLACE] PROCEDURE Procedure_name
[ (argment [ { IN | IN OUT }] Type,
argment [ { IN | OUT | IN OUT } ] Type ]
{ IS | AS }
<类型.变量的说明>
BEGIN
<执行部分>
EXCEPTION
<异常处理>
END;
函数:执行复杂操作,有返回值。
CREATE [OR REPLACE] FUNCTION <函数名>[(argument [ { IN | IN OUT }] type,argument [ { IN | OUT | IN OUT } ] type]RETURN <返回值类型>
{ IS | AS }
<类型.变量的说明>
BEGIN
<执行部分>
EXCEPTION
<异常处理>
END;
dbms_output.put_line(fun());
select fun() from dual;
IN
;OUT
;IN OUT
;位置表示法:根据参数位置依此传值
argument_value1[,argument_value2 …]
名称表示法:使用关系运算符=>
为参数传值
argument => parameter [,…]
触发器:用户定义的一类由事件触发而执行的特殊过程。
CREATE [OR REPLACE] TRIGGER <触发器名称>
{BEFORE | AFTER | INSTEAD OF}
{INSERT | DELETE | UPDATE [OF column [, column …]]}
ON <表/视图>
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW | STATEMENT]
[WHEN condition]
trigger_body;
触发事件:INSERT | DELETE | UPDATE
触发时机:BEFORE | AFTER
触发频率:
触发器的新值与旧值:
标签:exception 输出变量 上下 iso poi cti parameter bms 控制
原文地址:https://www.cnblogs.com/liziczh/p/9353051.html