- 浏览: 1098600 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
skyesx:
这是2PC实现,更常用的是一个柔性事务的实现,可以参考http ...
Spring分布式事务实现 -
ddbird:
这第一句就不严谨“分布式事务是指操作多个数据库之间的事务”,显 ...
Spring分布式事务实现 -
呵呵6666:
基于互联网支付系统的微服务架构分布式事务解决方案http:// ...
Spring分布式事务实现 -
小黄牛:
写得不错,交流群:472213887
Spring分布式事务实现 -
jiaoqf321456:
这明明是用的apache的压缩,给ant.jar有半毛钱关系吗 ...
使用ant.jar进行文件zip压缩
一、PL/SQL的异常
1.处理异常:
例:
2.预定义异常:
异常名称 ORACLE错误 说明
CURSOR_ALREADY_OPEN ORA-6511 试图打开一个已打开的光标
DUP_VAL_ON_INDEX ORA-0001 试图破坏一个唯一性限制
INVALID_CURSOR ORA-1001 试图使用一个无效的光标
INVALID_NUMBER ORA-1722 试图对非数字值进行数字操作
LOGIN_DENIED ORA-1017 无效的用户名或者口令
NO_DATA_FOUND ORA-1403 查询未找到数据
NOT_LOGGED_ON ORA-1012 还未连接就试图数据库操作
PROGRAM_ERROR ORA-6501 内部错误
ROWTYPE_MISMATCH ORA-6504 主变量和光标的类型不兼容
STORAGE_ERROR ORA-6500 内部错误
TIMEOUT_ON_RESOURCE ORA-0051 发生超时
TOO_MANY_ROWS ORA-1422 SELECT INTD命令返回的多行
TRANSACTION_BACKED_OUT ORA-006 由于死锁提交被退回
VALUE_ERROR ORA-6502 转换或者裁剪错误
ZERO_DIVIDE ORA-1476 试图被零除
3.自定义异常处理
注意:-01445 因为PRAGMA EXCEPTION_INIT命令把这个变量(-01455)连接到
这个ORACLE错误,该语句的语法如下:
4.自定义异常
5.在PL/SQL中单条记录的查询
在PL/SQL内,有时在没有定义显式光标的情况下需要查询单条记录,并把记录的数据赋给变量。
二、使用光标
光标(CURSOR)是指向一个称为上下文相关区的区域的指针,这个区域在服务器的处理过程全局区(PGA)内,当服务器上执行了一个查询后,查询返回的记录集存放在上下文相关区,通过光标上的操作可以把这些记录检索到客户端的应用程序。
1.使用光标的基本方法
属性说明
%FOUND:布尔型属性,当最近一次该记录时成功返回,则值为TRUE
%NOTFOUND:布尔型属性,它的值总与%FOUND属性的值相反
%ISOPEN:布尔型属性,当光标是打开时返回TRUE
%ROWCOUNT:数字型属性,返回已从光标中读取的记录数
2.使用光标FOR循环
3.带参数的光标
三、创建代表数据库记录和列的变量
1.变量名 基表名.列名%TYPE
2.变量名 基表名%ROWTYPE
四、用PL/SQL表实现数组功能
PL/SQL表与其他过程化语言(如C语言)的一维数组类似。实现PL/SQL表需要创建一个数据类型并另外进行变量说明。
Type <类型名> Is
Table Of <数据类型>
Index by Binary_Integer;
例子:
五、数据链路(database link)
通过创建database link实现ORACLE跨数据库查询的方法。
(1)配置本地数据库服务器的tnsnames.ora文件($ORACLE_HOME/network/admin/tnsnames.ora)
EA_OA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 195.2.199.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = EA_OA)
)
)
创建链接:注意:这里不会验证用户名密码的正确性
CREATE DATABASE LINK [数据库链接名] CONNECT TO [用户名] IDENTIFIED BY [密码] USING '[本地配置的数据的实例名]';
使用链接:
查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@database link名”。
为这个表创建一个同义词,然后直接用同义词,就如同操作本地表。
六、导入导出存储过程
(1)PL/SQL Stored Procedure Export
Tools > Export User Objects > Select Package And Package Body > Export
(2)PL/SQL Stored Procedure Import
New > Command Window > @d:\my_proc.sql
1.处理异常:
EXCEPTION WHEN first_exception THEN … WHEN second_exception THEN … WHEN OTHERS THEN /*OTHERS异常处理器必须排在最后,它处理所有没有明确列出的异常。*/ … END;
例:
DECLARE X NUMBER; BEGIN X:= 'yyyy';--Error Here EXCEPTION WHEN VALUE_ERROR THEN DBMS_OUTPUT.PUT_LINE('EXCEPTION HANDED'); END;
2.预定义异常:
异常名称 ORACLE错误 说明
CURSOR_ALREADY_OPEN ORA-6511 试图打开一个已打开的光标
DUP_VAL_ON_INDEX ORA-0001 试图破坏一个唯一性限制
INVALID_CURSOR ORA-1001 试图使用一个无效的光标
INVALID_NUMBER ORA-1722 试图对非数字值进行数字操作
LOGIN_DENIED ORA-1017 无效的用户名或者口令
NO_DATA_FOUND ORA-1403 查询未找到数据
NOT_LOGGED_ON ORA-1012 还未连接就试图数据库操作
PROGRAM_ERROR ORA-6501 内部错误
ROWTYPE_MISMATCH ORA-6504 主变量和光标的类型不兼容
STORAGE_ERROR ORA-6500 内部错误
TIMEOUT_ON_RESOURCE ORA-0051 发生超时
TOO_MANY_ROWS ORA-1422 SELECT INTD命令返回的多行
TRANSACTION_BACKED_OUT ORA-006 由于死锁提交被退回
VALUE_ERROR ORA-6502 转换或者裁剪错误
ZERO_DIVIDE ORA-1476 试图被零除
3.自定义异常处理
DECLARE BAD_ROWID EXCEPTION; X ROWID; PRAGMA EXCEPTION_INIT(BAD_ROWID,-01445); BEGIN SELECT ROWID INTO X FROM TAB WHERE ROWNUM=1; EXCEPTION WHEN BAD_ROWID THEN DBMS_OUTPUT.PUT_LINE('CANNOT QUERY ROWID FROM THIS VIEW'); END;
注意:-01445 因为PRAGMA EXCEPTION_INIT命令把这个变量(-01455)连接到
这个ORACLE错误,该语句的语法如下:
PRAGMA EXCEPTION_INIT(exception_name, error_number);其中error_number是负数,因为错误号被认为负数,当定义错误时记住使用负号。
4.自定义异常
DECLARE SALARY_CODE VARCHAR2(1); INVALID_SALARY_CODE EXCEPTION; BEGIN SALARY_CODE:='X'; IF SALARY_CODE NOT IN('A', 'B', 'C') THEN RAISE INVALID_SALARY_CODE;--抛出异常 END IF; EXCEPTION WHEN INVALID_SALARY_CODE THEN DBMS_OUTPUT.PUT_LINE('INVALID SALARY CODE'); END;
5.在PL/SQL中单条记录的查询
在PL/SQL内,有时在没有定义显式光标的情况下需要查询单条记录,并把记录的数据赋给变量。
DECLARE ln_dno NUMBER; lvs_dname VARCHAR2(40); BEGIN SELECT user_id,user_name INTO ln_dno,lvs_dname FROM t_user_table WHERE Rownum=1; DBMS_OUTPUT.PUT_LINE(TO_CHAR(ln_dno)||'.'||lvs_dname); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('NO DATA_FOUND'); WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS'); END;
二、使用光标
光标(CURSOR)是指向一个称为上下文相关区的区域的指针,这个区域在服务器的处理过程全局区(PGA)内,当服务器上执行了一个查询后,查询返回的记录集存放在上下文相关区,通过光标上的操作可以把这些记录检索到客户端的应用程序。
1.使用光标的基本方法
DECLARE CURSOR C1 IS SELECT VIEW_NAME FROM ALL_VIEWS WHERE ROWNUM<=10 ORDER BY VIEW_NAME; VNAME VARCHAR2(40); BEGIN OPEN C1; FETCH C1 INTO VNAME; WHILE C1%FOUND LOOP DBMS_OUTPUT.PUT_LINE(TO_CHAR(C1%ROWCOUNT)||' '||VNAME); FETCH C1 INTO VNAME; END LOOP; END;
属性说明
%FOUND:布尔型属性,当最近一次该记录时成功返回,则值为TRUE
%NOTFOUND:布尔型属性,它的值总与%FOUND属性的值相反
%ISOPEN:布尔型属性,当光标是打开时返回TRUE
%ROWCOUNT:数字型属性,返回已从光标中读取的记录数
2.使用光标FOR循环
DECLARE CURSOR C1 IS SELECT VIEW_NAME FROM ALL_VIEWS WHERE ROWNUM<=10 ORDER BY VIEW_NAME; BEGIN FOR I IN C1 LOOP DBMS_OUTPUT.PUT_LINE(I.VIEW_NAME); END LOOP; EXCEPTION WHEN OTHERS THEN NULL; END;
3.带参数的光标
DECLARE CURSOR C1(VIEW_PATTERN VARCHAR2) IS SELECT VIEW_NAME FROM ALL_VIEWS WHERE VIEW_NAME LIKE VIEW_PATTERN||'%' AND ROWNUM<=10 ORDER BY VIEW_NAME; VNAME VARCHAR2(40); BEGIN FOR I IN C1('USER_AR') LOOP DBMS_OUTPUT.PUT_LINE(I.VIEW_NAME); END LOOP; DBMS_OUTPUT.PUT_LINE('.....'); FOR I IN C1('USER') LOOP DBMS_OUTPUT.PUT_LINE(I.VIEW_NAME); END LOOP; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('AAA'); END;
三、创建代表数据库记录和列的变量
1.变量名 基表名.列名%TYPE
DECLARE V_NO t_User_Table.User_Id%TYPE; V_NAME t_User_Table.User_Name%TYPE; BEGIN SELECT User_Id,User_Name INTO V_NO,V_NAME FROM t_User_Table WHERE Rownum=1; DBMS_OUTPUT.PUT_LINE(TO_CHAR(V_NO) || ':' || V_NAME); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; END;
2.变量名 基表名%ROWTYPE
DECLARE D t_user_table%ROWTYPE; BEGIN SELECT user_id,user_name INTO D.user_id, D.user_name FROM t_user_table WHERE rownum=1; DBMS_OUTPUT.PUT_LINE(D.user_id || ':' || D.user_name); EXCEPTION WHEN NO_DATA_FOUND THEN NULL; WHEN TOO_MANY_ROWS THEN DBMS_OUTPUT.PUT_LINE('TOO_MANY_ROWS'); END;
四、用PL/SQL表实现数组功能
PL/SQL表与其他过程化语言(如C语言)的一维数组类似。实现PL/SQL表需要创建一个数据类型并另外进行变量说明。
Type <类型名> Is
Table Of <数据类型>
Index by Binary_Integer;
例子:
Declare Type Array_type is Table Of Number Index by Binary_Integer; My_Array Array_type; Begin For I In 1..10 Loop My_Array(I) := I*2; End Loop; For I In 1..10 Loop Dbms_Output.Put_line(To_char(My_Array(I))); End Loop; End;
五、数据链路(database link)
通过创建database link实现ORACLE跨数据库查询的方法。
(1)配置本地数据库服务器的tnsnames.ora文件($ORACLE_HOME/network/admin/tnsnames.ora)
EA_OA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 195.2.199.3)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = EA_OA)
)
)
创建链接:注意:这里不会验证用户名密码的正确性
CREATE DATABASE LINK [数据库链接名] CONNECT TO [用户名] IDENTIFIED BY [密码] USING '[本地配置的数据的实例名]';
create public database link TO_EA_OA connect to admin identified by 123456 using 'EA_OA';
使用链接:
查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@database link名”。
select * from oa_user_basic@TO_EA_OA;
为这个表创建一个同义词,然后直接用同义词,就如同操作本地表。
create public SYNONYM oa_user for oa_user_basic@TO_EA_OA; select * from oa_user -- 跟前面结果一样
六、导入导出存储过程
(1)PL/SQL Stored Procedure Export
Tools > Export User Objects > Select Package And Package Body > Export
(2)PL/SQL Stored Procedure Import
New > Command Window > @d:\my_proc.sql
发表评论
-
Oracle 如何扩展表空间
2013-09-26 14:29 0一、查看Oracle表空间的使用情况 select dbf ... -
Oracle之自定义聚合函数
2013-08-18 14:56 0一、聚合字符串 CREATE OR REPLACE FUN ... -
SQL Plus 命令及使用
2011-09-20 17:09 0一、登录到数据库 1.直接敲sqlplus并回车就是启动SQ ... -
Oracle数据字典/字段注释/分布式事务故障
2011-03-16 21:55 0一、Java 获取表的属性可以通过ResultSetMetaD ... -
Oracle中常用SQL
2010-05-28 12:49 01、求出本星期第一天和第七天的日期 select tru ... -
Oracle Errors收集
2010-05-23 23:21 2354一、ORA-01652无法通过128(在temp表空间中)扩展 ... -
oracle自动备份数据
2010-02-04 15:19 0一、自动备份脚本(backup.bat) @ECHO OF ... -
oracle实例内存(SGA和PGA)调整
2010-01-04 14:24 53805一、名词解释 (1)SGA:System Global Are ... -
PL/SQL集合类型
2009-11-20 13:57 5389PL/SQL集合类型是类似于高级语言数组的一种复合数据 ... -
java oracle clob
2009-06-26 21:59 6300create table TEST_CLOB ( ... -
oracle blob数据存取
2009-06-26 21:58 6089Oracle中的lob (Large Object)可 ... -
oracle 管道化表函数(Pipelined Table)
2009-06-18 20:37 9558在实际的应用中,为了让PL/SQL 函数返回数据的多个 ... -
ORACLE批量绑定FORALL与BULK COLLECT
2009-06-18 20:36 19966FORALL与BULK COLLECT的使用方法: 1. ... -
oracle 统计/分析函数
2009-06-09 14:42 6403Oracle从8.1.6开始提供分析函数,分析函数 ... -
PL/SQL开发中动态SQL的使用与过程分页
2009-06-01 11:45 2195在Oracle数据库开发 ... -
Oracle格式化函数
2009-04-02 14:52 6284格式化函数 函数 返回类型 描述 ... -
Oracle数据导入导出imp/exp命令和grant命令
2009-04-02 12:17 15541一、数据导入导出命令 ... -
JDBC驱动类型的区别
2009-03-31 08:31 3285jdbc-odbc桥:将JDBC调用转换到ODBC调用。 ... -
Java程序使用OCI驱动连接Oracle数据库
2009-03-31 08:00 4558根据oracle的说法,ja ... -
oracle之spfile与pfile
2009-01-20 15:19 14578pfile(Initialization Paramet ...
相关推荐
§16.2.4 与存储过程相关数据字典 280 §16.3 创建函数 281 §16.4 过程和函数中的例外处理 282 §16.4.1 使用系统定义的例外处理 282 §16.4.1.1 没有例外处理的缺点 283 §16.4.1.2 使用预定义的例外处理 283 §...
§16.2.4 与存储过程相关数据字典 280 §16.3 创建函数 281 §16.4 过程和函数中的例外处理 282 §16.4.1 使用系统定义的例外处理 282 §16.4.1.1 没有例外处理的缺点 283 §16.4.1.2 使用预定义的例外处理 283 §...
4.1.4 PL/SQL数据类型 4.1.5 PIJSQL变量和常量 4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建...
4.1.4 PL/SQL数据类型 4.1.5 PIJSQL变量和常量 4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 4.3.1 创建...
17. **Exception处理**: 在FORM中,异常处理是通过EXCEPTION部分的PL/SQL代码进行的,如WHEN OTHERS语句。 18. **隐藏菜单项**: 要在运行时隐藏“窗口”菜单项,可以修改菜单对象的VISIBLE属性。 19. **屏蔽功能键...
4.1.4 PL/SQL数据类型 4.1.5 PIJSQL变量和常量 4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 4.3 过程 ...
4.1.4 PL/SQL数据类型 4.1.5 PIJSQL变量和常量 4.1.6 PL/SQL语句控制结构 4.1.7 PL/SQL表达式 4.2 PL/SQL的游标 4.2.1 基本原理 4.2.2 显式游标 4.2.3 隐式游标 4.2.4 游标属性 4.2.5 游标变量 ...
这部分介绍了如何使用 PL/SQL 来读写 Excel 文件,这对于数据导出或导入的需求非常实用。 **5.4 PL/SQL 异常机制** 这部分解释了 PL/SQL 中的异常处理机制,包括如何捕获和处理运行时错误,这对于提高程序的健壮性...
它支持多种数据库操作,包括数据查询、数据修改、数据导出、数据库对象创建和管理等,是Oracle数据库开发者和管理员的理想助手。 ##### 1.2 技术支持 用户可以通过访问官方网站(http://www.antwiz.com)获取技术...