TYPEnested_typeISTABLEOFVARCHAR2 ( 30 ) [not null];
--值为varchar2的数组,下标为默认int ;
TYPECalendarISVARRAY(366 ) OFNUMBER;
--366个number数组,下标1-366( 不是 0-365)
TYPEpopulation_typeISTABLEOFNUMBER
INDEXBYVARCHAR2( 64 );
--下标是varchar2,值是number 的数组
DECLARE
TYPEwordlistISTABLEOFVARCHAR2 ( 5 );
words wordlist;
BEGIN
words( 1 ) := 10; --COLLECTION_IS_NULL,未赋空间
words := wordlist(10, 20 , 30 ); --进行赋值
words( 1 ) := 'yes'; --正确
words( 2 ) := words( 1 ) || 'no';--正确
words( 3 ) := 'longer than 5 characters';--VALUE_ERROR,字符过长
words( 'B' ) := 'dunno'; --VALUE_ERROR,下标错误
words( 4 ) := 'maybe'; --SUBSCRIPT_BEYOND_COUNT,下标超限
END;
IFcourses.EXISTS(i)THEN
courses(i) := new_course;
ENDIF;
FORiIN1.. courses.COUNTLOOP...
注意:COUNT会忽略已经被删除的元素
IF(projects.COUNT +15) < projects.LIMITTHEN...
FORiINcourses.FIRST .. courses.LASTLOOP...
n := courses.PRIOR(courses.FIRST); --assigns NULL to n
courses.EXTEND(m,n ); --将第n个元素的值复制m份加到集合末端
courses.TRIM(3);--与extend相反
courses.DELETE --删除全部
courses.DELETE(2) --删除第2个元素
courses.DELETE(2,5 ) --删除第2到第5 个元素
COLLECTION_IS_NULL ---调用一个空集合的方法,集合未被初始化
NO_DATA_FOUND ---下标索引指向一个被删除的元素,或是关联数组中不存在的元素
SUBSCRIPT_BEYOND_COUNT ---下标索引值超过集合中的元素个数
SUBSCRIPT_OUTSIDE_LIMIT---下标索引超过允许范围之外
VALUE_ERROR ---下标索引值为空,或是不是指定的下标类型
FORALLiINpnums.FIRST .. pnums.LAST
INSERTINTOpartnoVALUES(pnums(i)); ---注意:不用再Loop了
IFSQL%BULK_ROWCOUNT ( 3 ) = 0THEN...
表示如果第3次操作没有对数据影响的行数为0话……
注意%BULK_ROWCOUNT的值是可以大于1的,比如批量插入等
DECLARE
TYPEnumlistISTABLEOFNUMBER ;
num_tab numlist := numlist(10,0,11,12,30,0,20,199,2,0,9,1);
ERRORS NUMBER;
dml_errors EXCEPTION;
PRAGMAEXCEPTION_INIT(dml_errors, -24381 );
BEGIN
FORALLiINnum_tab.FIRST .. num_tab.LASTSAVEEXCEPTIONS
DELETEFROMemp
WHEREsal >500000/ num_tab(i);
EXCEPTION
WHENdml_errorsTHEN
ERRORS :=SQL%BULK_EXCEPTIONS.COUNT;
DBMS_OUTPUT.put_line('Number of errors is '|| ERRORS);
FORiIN1..ERRORSLOOP
DBMS_OUTPUT.put_line( 'Error '
|| i
||' occurred during '
||'iteration '
||SQL%BULK_EXCEPTIONS(i).ERROR_INDEX);
DBMS_OUTPUT.put_line( 'Oracle error is '
||SQLERRM(-SQL% BULK_EXCEPTIONS (i).ERROR_CODE));
ENDLOOP;
END;