北大青鸟oracle学习笔记18
异常
预定义异常
oracle为常见错误预定义
在DBMS_STANDARD程序包中提供了这些定义
不需要显示声明
declare
sex student.stu_sex%type;
begin
select stu_sex into sex from student;
dbms_output.put_line('sex:'||sex);
exception
when no_data_found then
dbms_output.put_line('no such student!');
when too_many_rows then
dbms_output.put_line('too many rows selected!');
when others then
dbms_output.put_line('other error!');
end;
预定义异常名
产生原因
ACCESS_INTO_NULL
未定义对象
CASE_NOT_FOUND
CASE中若为包含相应的WHEN,并且没有设置ELSE时
COLLECTION_IS_NULL
集合元素未初始化
CURSER_ALREADY_OPEN
游标已经打开
DUP_VAL_ON_INDEX
唯一索引对应的列上有重复值
INVALID_CURSOR
在不合法的游标上进行操作
INVALID_NUMBER
内嵌的SQL语句不能将字符转换为数字
NO_DATA_FOUND
使用select into 未返回行,或应用索引表未初始化元素时
TOO_MANY_ROWS
执行select into时机过集超过一行
ZERO_DIVIDE
除数为0
SUBSCRIPT_BEYOND_COUNT
元素下标超过嵌套表或VARRAY的最大值
SUBSCRIPT_OUTSIDE_LIMIT
使用嵌套表或VARRAY时将下标制定为负数
VALUE_ERROR
赋值时,变量长度不足以容纳实际数据
LOGIN_DENIED
PL/SQL 应用程序连接到 oracle 数据库时,提供了不正确的用户名或密码
NOT_LOGGED_ON
PL/SQL 应用程序在没有连接 oralce 数据库的情况下访问数据
PROGRAM_ERROR
PL/SQL 内部问题,可能需要重装数据字典& pl./SQL 系统包
ROWTYPE_MISMATCH
宿主游标变量与 PL/SQL 游标变量的返回类型不兼容
SELF_IS_NULL
使用对象类型时,在 null 对象上调用对象方法
STORAGE_ERROR
运行 PL/SQL 时,超出内存空间
SYS_INVALID_ID
无效的 ROWID 字符串
TIMEOUT_ON_RESOURCE
Oracle 在等待资源时超时
用户自定义异常
声明类型为Exception类型
只能主动由raise抛出
declare
Dup_Value Exception;
icount int := 0;
begin
select count(*) into icount from student;
if icount > 0 then
相关文档:
测试环境基本信息:
OS:Windows XP sp3
DB:Oracle 9.2.0.1 未启用归档
DB重做日志文件大小:100MB
硬盘型号:SAMSUNG HD161GJ(SATA-300,160G,7200rpm,8M cache)
CPU:Intel Core2 E8400(3.0G)
内存:2G
通过HD Tune得到的硬盘基本测试信息,
IOPS:66
读取:90MB/s
写入:82MB/s
� ......
查看正在执行的sql语句
SELECT osuser, username, sql_text from v$session a, v$sqltext b where a.sql_address =b.address order by address, piece;
捕捉运行很久的SQL
select username,sid,opname, round(sofar*100 / totalwork,0) || '%' as progress, time_remaining,sql_text from v$session_longops , v$ ......
按表方式的导出,导入
exp SYSTEM/SYSTEM@SBJSDB00 TABLES=KOKAN90.MASTER_SEND_LIMIT LOG=C:\A.LOG
IMP SYSTEM/SYSTEM@SBJSDB00 IGNORE=Y FULL=Y LOG=C:\B.LOG
之前用过很多语句都报错,得到的教训是 先执行exp SYSTEM/SYSTEM@SBJSDB00,按提示一步步输入成功过后,再把提示翻译成参数和参数值
关于参数说明用 exp hel ......
关键字: oracle cast() 函数问题
SQL> create table t1(a varchar(10));
Table created.
SQL> insert into t1 values ('12.3456');
1 row created.
SQL> select round(a) from t1;
ROUND(A)
----------
12
SQL> select round(a,3) from t1;
ROUN ......
Oracle执行计划的相关概念:
rowid:系统给oracle数据的每行附加的一个伪列,包含数据表名称,数据库id,存储数据库id以及一个流水号等信息,rowid在行的生命周期内唯一。
recursive sql:为了执行用户语句,系统附加执行的额外操作语句,譬如对数据字典的维护等。
row source(行源):oracle执行步骤过程中,由上一 ......