




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于存储过程编写的一点总结一. 数据类型和相关函数1. 数字PLS_INTEGER: -2147483647 2147483647NUMBER:十进制或者整数相关函数:ABS(n) 绝对值CEIL(n) 向上取整FLOOR(n) 向下取整ROUND(m,n) 四舍五入TRUNC(m,n) 截取GREATEST(n,n) 最大值LEAST(n,n) 最小值MOD(m,n) 余数SIGN(n) 符号2. 字符CHAR:定长字符VARCHAR2:变长字符相关函数:INITCAP / LOWER / UPPER(c) 大小写格式化INSTR / INSTRB(c1,c2,n,m) 搜索指定字符/字节的位置索引LENGTH / LENGTHB(c) 字符/字节数TRIM(LEADING | TRAILING | BOTHc2 FROM c1) 从左/右/全部截掉指定字符SUBSTR(c,m,n) 截取REPLACE(c1, c2,c3) 替代3. 日期DATE相关函数ADD_MONTHS(d,n) 增加月份LAST_DAY(d) 当月最后一天MONTHS_BETWEEN(d1,d2) 两个日期之间的月数其它函数:TO_CHAR(d | n,fmt) / TO_NUMBER(c,fmt) / TO_DATE(c,fmt) 转换函数DECODE(expr, case, result, case, result, default) 嵌入式IF条件判断函数二. 匿名块和存储过程结构存贮过程应该是一组经过压缩处理的经常使用的一组命令,如交叉表的查询、更新和插入操作。存贮过程允许程序员简单地将该过程作为一个函数来调用,而不是重复地执行过程内部的语句。而且存贮过程还有些附加的优点。当存贮过程执行时,SQL 语句将在服务器中继续运行,一些数据信息将会返回给用户的电脑直至过程执行完毕。这会极大地提高性能并带来了附加的好处。存贮过程在第一次执行时,在数据库经过了编译操作,编译的映象将存贮在服务器的过程中。因此你不必在每一次执行它的时候都对它进行优化,这也使性能得到了提高。匿名块就是将头部分改成DECLARE的存储过程.三. 变量的声明和使用一般格式:variable_name type CONSTANT NOT NULL := initial_value;强类型声明variable_name schema. table_name.column_name%TYPE;弱类型声明关键字variable_name 指定变量名。最长30个字符,必须用字母开始,可以包含字母、数字、下划线、$和#等等。变量名除了放在双引号中的之外是不区分大小写的,其它地方(如表名,列名等等)也基本如此,除了放在双引号之中,不可以使用保留字(如SELECT等等)作为变量名。type指定变量数据类型。CONSTANT保留字,指定一个初始化值用于该变量,而且不可以改变该值。NOT NULL指定一个初始化值用于该变量,而且不可以设置为NULL。initial_value初始化值。省略则默认为NULL。指定了CONSTANT或者NOT NULL则必须指定初始化值。schema数据库中的架构(用户)名。省略则使用当前架构(用户)名。table_name特定架构中的表名。column_name特定表中的列名。关于声明记录类型和索引表类型PL/SQL中,想要将一定数量的相关变量作为单元操作时,可以声明记录类型。该类型与C语言中的结构相似。要使用记录,必须首先定义记录类型。然后基于该类型声明记录变量。TYPE type_name IS RECORD (variable_name type NOT NULL := initial_value, variable_name type NOT NULL := initial_value );record_name type_name;记录的独立字段可以使用点符号(.)record_name. variable_namePL/SQL中需要一个变量多次出现时候,可以定义索引表。类似与C语言中的一维数组。同样,必须先定义类型,然后基于该类型声明索引表变量。TYPE tabletype_name IS TABLE OF type | schema. table_name%ROWTYPE INDEX BY BINARY_INTEGER;table_name type_name;声明的结果是具有两列的内存表:KEY (BINARY_INTEGER)VALUE(在声明语句中定义的类型type)可以使用table_name(key)来引用单个元素。四. EXECUTE IMMEDIATE在存储过程内使用的SQL语句只能是下列之一:SELECTINSERTUPDATEDELETECOMMITROLLBACK(还有几个很不常用的,没有列出)PL/SQL中不允许数据定义语言(DDL),包括会话和系统控制语句。Oracle自扩展的统计分析函数(例如MAX over.)也不被允许。当因程序需要而必须在PL/SQL中执行这些不被允许的语句时候,就可以使用EXECUTE IMMEDIATE。EXECUTE IMMEDIATE string;EXECUTE IMMEDIATE后面跟一个由可执行语句组成的字符串,在编译的时候由于是字符串所以不会被编译,只有在执行存储过程的时候才会把这个字符串提交编译执行。利用这点可以执行例如TRUNCATE TABLE,CREATE TABLE,DROP TABLE等等语句。还有一个功能是可以动态生成SQL执行语句。可以在存储过程内部将sql语句分割成数个字符串,实现sql语句的拼接,然后利用EXECUTE IMMEDIATE执行。五. IF条件控制IF expression THEN statement;statement;ELSIF expression THENststement; statement;ELSEststement; statement;END IF;六. LOOP循环控制1. LOOP循环LOOPEXIT;EXIT WHEN condition;statement; statement;END LOOP;2. WHILE循环WHILE condition LOOPstatement; statement;END LOOP;3. FOR循环FOR counter IN REVERSE start . end LOOPstatement; statement;END LOOP;七. 异常处理1. 异常的类型异常Oracle错误号描述CURSOR_ALREADY_OPEN ORA-06511当游标已经处于打开状态时,试图再次打开游标DUP_VAL_ON_INDEXORA-00001违反唯一约束条件INVALID_CURSORORA-01001非法操作,如试图关闭已经关闭的游标INVALID_NUMBERORA-01722在SQL中将字符进行显式或隐式转换为数字时失败LOGIN_DENIEDORA-01017无效的用户名或者口令NO_DATA_FOUNDORA-01404查询没有返回行NOT_LOGGED_ONORA-01012会话没有连接到Oracle上OTHERS非预期错误PROGRAM_ERRORORA-06501内部PL/SQL错误ROWTYPE_MISMATCHORA-06504主机游标变量与PL/SQL游标变量的类型不匹配STORAGE_ERRORORA-06500进程超出了内存范围TIMEOUT_ON_RESOURCEORA-00051需要资源,但是操作超时TOO_MANY_ROWSORA-01422SELECT查询返回不止一行TRANSACTION_BACKED_OUTORA-00061死锁条件强制ROLLBACKVALUE_ERRORORA-06502在过程语句中发生了转换错误ZERO_DIVIDEORA-01476试图除以02. 异常的处理EXCEPTION WHEN exception_name THENpl/sql_statements;WHEN exception_name THENpl/sql_statements;WHEN OTHERS THENpl/sql_statements;END;异常部分可以使用两个异常函数:SQLCODE 返回Oracle错误号SQLERRM 返回Oracle错误文本3. 抛出异常和自定义异常RAISERAISE exception_name;RAISE_APPLICATION_ERRORRAISE_APPLICATION_ERROR(error_numer, error_text, keep_errors);error_number指定提供的错误号。该错误号应该在-20000和-20999之间提供。该范围是Oracle为用户定义的错误号设置的。error_text长度为12048字节的字符串,提供与错误相关的文本。keep_errors布尔值,为TRUE或FALSE。如果指定为TRUE,则将错误添加到已经提供的错误清单中。如果为FALSE,则使用以前的错误代替堆栈中的错误。默认为FALSE。八. 游标的声明和使用PL/SQL游标提供了从Oracle数据库中访问多行数据,并在每一行上执行程序的完全控制方法。1. 使用游标步骤声明游标CURSOR cursor_name IS select_statement;声明动态游标CURSOR cursor_type IS REF CURSOR;cursor_name cursor_type;打开游标OPEN cursor_name;打开动态游标OPEN cursor_name FOR select_statement;执行FETCH语句提取数据FETCH cursor_name INTO variable_list | record;关闭游标CLOSE cursor_name; 2. 游标FOR循环FOR variable_list | record IN cursor_name | (select_statement) LOOP pl/sql_statement;END LOOP;3. 游标的属性和使用%FOUND显示是否返回数据行%NOTFOUND显示数据行未返回%ISOPEN显示游标是否被打开%ROWCOUNT返回游标迄今为止返回的行数九. 关于优化1. SELECT子句中避免使用 *2. 使连接查询的表减小数据量3. 减少访问数据库的次数4. 使用DECODE函数5. 使用TRUNCATE代替DELETE6. 尽量多使用COMMIT7. 使用内部函数代替多表连接8. 使用EXISTS代替IN9. 使用
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年初二生物会考试题及答案
- 2025年新闻评论写作试题及答案
- 安康市中石油2025秋招笔试行测50题速记
- 国家能源锦州市2025秋招采矿工程类面试追问及参考回答
- 临汾市中石化2025秋招笔试模拟题含答案法律与合规岗
- 合肥市中石油2025秋招笔试提升练习题含答案
- 嘉兴市中石化2025秋招面试半结构化模拟题及答案电气仪控技术岗
- 衡水市中石化2025秋招面试半结构化模拟题及答案安全环保与HSE岗
- 金华市中石化2025秋招面试半结构化模拟题及答案安全环保与HSE岗
- 中国广电钦州市2025秋招行业解决方案岗位专业追问清单及参考回答
- 稳评从业人员培训考试及答案解析
- 2025年度反洗钱阶段考试培训试考试题库(含答案)
- 2025年甘肃省兰州市榆中县招聘乡村医生考试参考试题及答案解析
- 收割芦苇施工方案
- 燃气入户安检课件
- 普通黄金现货购买合同8篇
- 预防静电安全知识培训课件
- 三力测试考试题库及答案视频讲解
- 2025年河南省人民法院聘用书记员考试试题及答案
- 2025年中学教师资格考试《综合素质》核心考点与解析
- 临时用电专项施工方案(老旧小区改造项目)
评论
0/150
提交评论