- 浏览: 1087405 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
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 2270一、ORA-01652无法通过128(在temp表空间中)扩展 ... -
oracle自动备份数据
2010-02-04 15:19 0一、自动备份脚本(backup.bat) @ECHO OF ... -
oracle实例内存(SGA和PGA)调整
2010-01-04 14:24 53677一、名词解释 (1)SGA:System Global Are ... -
PL/SQL集合类型
2009-11-20 13:57 5303PL/SQL集合类型是类似于高级语言数组的一种复合数据 ... -
java oracle clob
2009-06-26 21:59 6228create table TEST_CLOB ( ... -
oracle blob数据存取
2009-06-26 21:58 6024Oracle中的lob (Large Object)可 ... -
oracle 管道化表函数(Pipelined Table)
2009-06-18 20:37 9473在实际的应用中,为了让PL/SQL 函数返回数据的多个 ... -
ORACLE批量绑定FORALL与BULK COLLECT
2009-06-18 20:36 19878FORALL与BULK COLLECT的使用方法: 1. ... -
oracle 统计/分析函数
2009-06-09 14:42 6299Oracle从8.1.6开始提供分析函数,分析函数 ... -
PL/SQL开发中动态SQL的使用与过程分页
2009-06-01 11:45 2114在Oracle数据库开发 ... -
Oracle格式化函数
2009-04-02 14:52 6230格式化函数 函数 返回类型 描述 ... -
Oracle数据导入导出imp/exp命令和grant命令
2009-04-02 12:17 15446一、数据导入导出命令 ... -
JDBC驱动类型的区别
2009-03-31 08:31 3215jdbc-odbc桥:将JDBC调用转换到ODBC调用。 ... -
Java程序使用OCI驱动连接Oracle数据库
2009-03-31 08:00 4499根据oracle的说法,ja ... -
oracle之spfile与pfile
2009-01-20 15:19 14522pfile(Initialization Paramet ...
相关推荐
pl/sql例题代码pl/sql例题代码pl/sql例题代码
pl/sql developer11.0下载 pl/sql developer11.0下载 pl/sql developer11.0下载
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL ...
《Oracle PL/SQL程序设计(第5版)(套装上下册)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何...
PL/SQL是Oracle对标准数据库语言的扩展,Oracle公司已经将PL/SQL整合到Oracle 服务器和...通过本教程的学习,您将初步掌握PL/SQL语言,能够利用PL/SQL语言完成建表、查询、添加、删除数据以及事务处理语句的基本用法。
一个对数据库的操作工具PL/SQL,能够对ORACLE\SQL进行很好的帮助操作!
PL/SQL 程序设计 本章主要重点: PL/SQL概述 PL/SQL块结构 PL/SQL流程 运算符和表达式 游标 异常处理 数据库存储过程和函数 包 触发器
PL/SQL, Oracle's procedural extension of SQL, is an advanced fourth-generation programming language (4GL). It offers modern features such as data encapsulation, overloading, collection types, ...
SQL and Pl/SQL培训文档 第一天 第一章 PL/SQL 简介 安装scott/tigger用户模式 Example1 标准的PL/SQL块结构 PL/SQL块类型 Example2:子程序,函数,程序包 PL/SQL代码的执行 第二章 PL/SQL数据类型 预定义数据类型 ...
在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL免安装版,点击即用,非常方便!
《Oracle PL/SQL程序设计(第5版)》基于Oracle数据库11g,从PL/SQL编程、PL/SQL程序结构、PL/SQL程序数据、PL/SQL中的SQL、PL/SQL应用构建、高级PL/SQL主题这6个方面详细系统地讨论了PL/SQL以及如何有效地使用它。...
pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl/sql 下载pl...
最新pl/sql7.0中文手册
DBATools For PL/SQL Developer 是一款PL/SQL Developer的辅助插件,主要功能是提供许多DBA数据库管理的功能,使ORACLE工程师不仅可以使用PL/SQL Developer进行开发设计,同时也可以进行数据库管理及监控,大大提高...
PL/SQL developer 12.07 注册码 可以使用,不错,自己用过了,分享给大家
1、PL/SQL简介 2、PL/SQL基础 3、记录和表 4、在PL/SQL中使用SQL 5、内置SQL函数 6、游标 7、过程和函数 ...
PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期。强大的PL/SQL编辑器,完善的Debugger...
oracle10g pl/sql完备教程,供初学者学习与开发者参考
PL/SQL Developer 8.0.3 1510 含注册机 PL/SQL Developer is an Integrated Development Environment that is specifically targeted at the development of stored program units for Oracle Databases. Over ...
很多时候你是不是为了32为的plsql的各种复杂配置烦恼,不要紧,现在下载64位的pl/sql,不需要繁琐的配置,让你更轻松