【网学网提醒】:网学会员为需要朋友们搜集整理了很全的PLSQL常用基本语法相关资料,希望对各位网友有所帮助!
1.联合数组:
联合数组的语法如下:
typetype_nameisTABLEOFelement_type[NOTNULL]
INDEXBYelement_type;
table_nameTYPE_NAME;
示例:
declare
typelast_name_typeisTABLEOFstudent.last_name%TYPE
INDEXBYBINARY_INTRGER
last_name_tablast_name_type;
2.嵌套表:
基本语法:
typetype_nameISTABLEOFelement_type[NOTNULL];
table_nameTYPE_NAME;
示例:
declare
TYPElast_name_typeISTABLEOFstudent.last_name%TYPE;
last_name_tablast_name_type:=last_name_type();
3.变长数组:
基本语法:
TYPEtype_nameIS{VARRY|VARYINGARRAY}(size_limit)OF
element_type[NOTNULL]
varray_nameTYPE_NAME;
示例:
DECLARE
TYPElast_nameISVARRAY(10)OFstudent.last_name%TYPE;
last_name_varraylast_name;
4.多层集合:
基本语法:
varray_name(subscriptoftheoutervarray)(subscriptoftheinnervarray)
示例:
DECLARE
TYPEvarray_type1ISVARRAY(10)OFINTEGER;
TYPEvarray_type2ISVARRAY(5)OFvarray_type1;
varary1varray_type1:=varray_type1(2,4,6,8);
varray2type_type2:=varray_type2(varray1);
BEGIN
DBMS.OUTPUT_LINE('varrayofintegers');
FORiIN1..4LOOP
DBMS.OUTPUT_LINE('varray1('||i||'):||varray1(1));
ENDLOOP;
varray2.EXTEND;
varray2(2):=varray_type1(1,3,5,7);
FORiIN1..3LOOP
FORjIN1..4LOOP
DBMS.OUTPUT_LINE
('varray2('||i||')('||j||'):=||varray2(i)(j);
ENDLOOP;
ENDLOOP;
END
5.IF语句:
基本语法:
IFCONDITIONTHEN
statement1;
....
statementn;
ENDIF;
6.IF-THEN-ELSE语句:
基本语法:
IFCONDITIONTHEN
statement1;
ELSE
statement2;
ENDIF
statement3;
7.ELSIF语句
基本语法:
IFCONDITION1THEN
statement1;
ELSIFCONDITION2THEN
statement2;
ELSIFCONDITION3THEN
statement3;
.......
ELSE
statementN;
ENDIF;
8.CASE语句:
基本语法:
CASESELETOR
WHENEXPESSION1THENSTATEMENT1;
WHENEXPESSION2THENSTATEMENT2;
........
WHENEXPESSIONNTHENSTATEMENTN;
ELSESTATEMENTN+1;
ENDCASE;
9.搜索式CASE:
基本语法:搜索式CASE语句有个产生布尔值的搜索条件.
CASE
WHENSEARCHCONDITION1THENSTATEMENT1;
WHENSEARCHCONDITION1THENSTATEMENT2;
.......
WHENSEARCHCONDITION1THENSTATEMENTN;
ELSESTATEMENTN+1;
ENDCASE;
10.NULLIF和COALESCE函数:
1)NULLIF函数:
NULLIF函数会比较两个表达式,如果两者相同,返回一个NULL,否则返回一个表达式的值。
NULLIF(expression1,expression2)
2)COALESCE函数
COALESCE函数会把表达式列表中的每个表达式与NULL比较,并返回第一个非NULL表达式的值。
COALESCE(expression1,expression2,....,expressionN);
等价于:NVL(expression1,NVL(expression2,NVL(expression3,.
..)))
11.EXIT语句:
基本语法:
LOOP
statement1;
statement2;
IFCONDITIONTHEN
EXIT;
ENDIF;
ENDLOOP;
statement3;
12.EXITWHEN语句:
基本语法:
LOOP
statement1;
statement2;
EXITWHENcondition;
ENDlOOP;
statement3;
13.WHILE循环:
基本语法:
WHILECONDITIONLOOP
statement1;
statement2;
......
statementN;
ENDLOOP;
14.WHILE中提前中止:
基本语法:
WHILECONDITIONLOOP
statement1;
statement2;
EXITWHENCONDITION;
ENDLOOP;
statement3;
15.数值型FOR循环:
基本语法:
FORloop_counterIN[REVERSE]lower_limit..upper_limitLOOP
statement1;
statement2;
.....
statementN;
ENDLOOP;
16.CONTINUE语句
基本语法:
LOOP
statement1;
statement2;
IFCONTINUE_CONDITIONTHEN(CONTINUEWHENCONTINUE_CONDITION)
CONTINUE;
ENDIF;
EXITWHENEXIT_CINDITION;
ENDLOOP;
statement3;
17.RAISE_APPLICATION_ERROR
基本语法:RAISE_APPLICATION_ERROR是Oracle提供的一种特殊的内置过程,允许开发人员
为特定的程序创建有意义的错误消息,适用于用户定义异常。
RAISE_APPLICATION_ERROR(error_number,error_message)||
RAISE_APPLICATION_ERROR(error_number,error_message,keep_errors);
18.游标
1)显示游标处理步骤:
a)声明游标:建立游标初始化环境;
b)打开游标:打开被声明的游标,并分配内存;
c)检索信息:从打开的游标中检索信息;
d)关闭游标:关闭检索后的游标,释放所分配的内存;
2)声明游标:
CURSORc_cursor_nameISselectstatement
示例:
DECLARE
CRUSORc_mycursorIS
SELECT*FROMzipcodeWHEREstate='NY';
3)记录类型:
为创建一个基于表或者基本游标的记录,可以用%ROWTYPE属性;
record_nametable_nameorcursor_name%ROWTYPE
4)打开游标
OPENcursor_name;
5)检索信息:
FETCHcursor_nameINTOPL/SQLvariables;
或者
FETCHcursor_nameINTOPL/SQLrecord;
6)关闭游标:
CLOSEcurosr_name;
7)声明一个记录类型:
TYPEtype_nameISRECORD
(field_name1DATATYPE1;
field_name2DATATYPE2;
.......
field_nameNDATATYPEN;
);
record_nameTYPE_NAME%ROWTYPE;
8)游标属性:
%NOTFOUNDcursor_name%NOTFOUNT当前面的FETCH操作没有返回数据行时,属性值是TRUE;
%FOUND cursor_name%FOUNT 当前面FETCH操作返回一行数据时,属性值为TRUE;
$ROWCOUNTcursor_name%ROWCOUNT从游标中所检索的记录改数量;
$ISOPENcursor_name%ISOPEN当游标处于打开状态时,属性值为TRUE;
9)使用游标FOR循环:
借助于游标FOR循环,游标打开、检索、关闭的过程被隐含地实现。
示例:
DECLARE
CURSORc_studentIS
SELECTstudent_id,last_name,first_name
FROM
studentWHEREstudent_id<100;
BEGIN
FORr_studentINc_student
LOOP
INSERTINTOtable_log
VALUES(r_student.last_name);
ENDLOOP;
END;
10)FORUPDATE和WHERECURRENT游标
基本语法:
FOR_UPDATEOF
示例:
DECLARE
CURSORc_courseIS
SELECTcourse_no,cost
FROMcourseFORUPDATE;
BEGIN
FORr_courseINc_cursor
LOOP
IFr_course_cost<2500
THEN
UPDATEcourse
SETcost=r_course.cost+10
WHERECOURSE_NO=r_course.course_no;
ENDIF;
ENDLOOP;
END;
FOR_CURRENTOF可以和FOR_UPDATE_OF一起使用,免于在UPDATE语句中添加对应的WHERE条件,
因为更新操作作只针对游标的录前记录。
19.解发器
1)基本通用语句:
CREATE[ORREPLACE]TRIGGERTtragger_name
{BEFORE|AFTER}Trigger_eventONtable_name
[FOREACHROW]
[FOLLOWSanother_trigger]
[ENABLE|DISABLE]
[WHENCONDITION]
DECLARE
declationstatements
BEGIN
executablestatements
EXCEPTION
exception-handlingstatements
END;
2)自治事务:
自治事务是由其它事务发起的独立事务。也就是说,自治事务也许会执行多个DML语句,并且提交或者回滚操作,
而不会提交或者回滚主事各执行的DML语句。
为定义一个自治事务,需要使用AUTONOMOUS_TRANSACTION编绎指令。即使用其的方法为:
DECLARE
PRAGMAAUTONOMOUS_TRANSACTION;
20.记录
1)记录类型
a)基于表和基于游标的记录
使用%ROWTYPE属性,可以创建基于表和基于游标的事记录。这个属性类似于用于定义标量的%TYPE
b)用户自己定义的游标
创建用户自己定义记录的通用语法如下:
TYPEtype_nameISRECORD
(field_name1datatype1[NOTNULL][:=DEFAULTEXPRESSION],
field_name2datatype2[NOTNULL][:=DEFAULTEXPRESSION],
.....
field_nameNdatatypeN[NOTNULL][:=DEFAULTEXPRESSION]);
record_nameTYPE_NAME;
2)嵌套记录
一些记录中包含其它记录和集合
示例:
DECLARE
TYPEname_typeISRECORD
{first_nameVARCHAR2(20),
last_nameVARCHAR2(20));
TYPEperson_typeis
{namename_type,
streetVARCHAR2(50),
cityVARCHAR2(20),
zipVARCHAR2(20));
person_recpreson_type;
END;
21.过程
1)创建过程:
CREATEORREPLACEPROCEDUREname
[(parameter[,parameter,....)]
AS
[localdeclarations]
BEGIN
executablestatementss
[EXCEPTION
execptionhandlers]
END[name];
2)过程传入和传出参数
IN给程序传值 用法:只读的值
OUT从程序返回的值,必须是变量用法:只写的值
INOUT传入值,也从程序返回 用法:必须是变量
22.函数
基本语法:
CREATE[ORREPLACE]FUNCTIONfunction_name
(parameterlist)
RETURNdatatype
IS
BEGIN
RE
TRUN(return_value);
END;