随笔分类 -  pl/sql programming

1
摘要:授权从 oracle 8i 开始, oracle 用通过提供 authid 子句为 pl/sql 的执行授权模型, 这样我们可以选择使用 authid current_user(调用者权限)来执行这个plsql语句, 这时这个程序是用调用者(当前)模式的授权运行的.与 SQL 整合pl/sql 于 ... 阅读全文
posted @ 2014-06-03 14:17 神之一招 阅读(295) 评论(0) 推荐(0) 编辑
摘要:这一章的内容, 只完成了一部分, 剩下的用到再补充吧由于依赖关系, 而编译失败, 需要重新编译. ( 所谓依赖, 是指存储过程, 函数等在运行中调用的对象, 比如table 等, 比如你删除了过程中调用的table, 然后又创建了一个一模一样的, 这个过程就需要重新编译)alter package ... 阅读全文
posted @ 2014-02-22 15:50 神之一招 阅读(455) 评论(0) 推荐(0) 编辑
摘要:我们可以把多个SQL语句集中在一起, 在逻辑上组成一个事务, 从而保证这些操作或者全部被保存到数据库(用sql的说法就是”提交”), 或者被整体驳回(用sql的说法是“回滚”).事务: ACID原子性: 改变或者全部发生, 或者全部不发生.一致性: 正确的状态转换, 不能违反任何完整性约束, 例如 ... 阅读全文
posted @ 2014-02-16 14:36 神之一招 阅读(1064) 评论(0) 推荐(0) 编辑
摘要:记录类型非常类似数据库表中的行. 记录作为一个整体本身并没有值, 不过每个单独成员或字段都有值, 记录提供了一种把这些值当做一组进行操作的方法.例如: 1: -- create a table 2: -- chap11_01.sql 3: create table books ( 4: book_id integer; 5: isbn varchar2(13), 6: title varchar2(200), 7: summary varchar2(2000), 8: author ... 阅读全文
posted @ 2014-02-15 15:47 神之一招 阅读(359) 评论(0) 推荐(0) 编辑
摘要:关联数组, 嵌套表, varray个人并不推荐使用集合, 因为操作有别于普通字段.集合中每一个元素的数据类型都是相同的, 因此这些元素都是同质的(同质元素)这一章的内容先忽略吧, 因为个人感觉用不到 阅读全文
posted @ 2014-02-15 15:47 神之一招 阅读(148) 评论(0) 推荐(0) 编辑
摘要:bolean 类型raw 类型, 用来保存和操作少量的二进制数据.urowid 和 rowid 类型, 这两种数据类型表示数据库的 rowid. 所谓 rowid 就是一个标识符-用来表示数据库中一行记录的物理地址的二进制值. 一个rowid值可以唯一的标识出数据库表中的一行数据, 即便这个表没有唯... 阅读全文
posted @ 2014-02-15 15:47 神之一招 阅读(744) 评论(0) 推荐(0) 编辑
摘要:number 类型, 十进制数据类型(平台无关的)pls_integer 和 binary_integer 这两种数据类型和你底层硬件表示整数的方法完全一致, 这两种类型的运算是利用硬件原生, 机器指令执行的, 你不能再数据库中保存这些类型的值.binary_float 和 binary_double 一般用于浮点数计算number 类型, number(9,2) // 注意, 这里的9是9位精度, 表示有效数字要包含2位小数, 所以这个数的最大值是 9 999 999.99number(9,11) // .00999999999, 其中 有效数字是9个, 而小数点后边的位数是11位.numb 阅读全文
posted @ 2014-02-15 10:48 神之一招 阅读(430) 评论(0) 推荐(0) 编辑
摘要:年 月 日 时 分 秒 时区 用小时表示的相对于 UTC 的时差 用分钟表示的相对于 UTC 的时差date 存储日期和时间, 不带时区, 精确到秒timestamp 存储日期和时间, 不带时区, 时间精度可以达到10亿分之一秒, 小数点后9位. 除了精度这一点之外, TIMESTAMP 和 DATE 相同timestamp with timezone 存储时区, 日期和时间, 精度达到小数点后 9 位timestamp with local timezone 保存日期和精确到小数点后 9 位, 这个数据类型对时区敏感, 这个类型的值会自动在数据库所在时区及当地时区(会话端)之间转化. 这个值 阅读全文
posted @ 2014-02-15 10:48 神之一招 阅读(2688) 评论(0) 推荐(0) 编辑
摘要:一般, char 和 nchar 类型很少使用.建议使用 varchar2 和 nvarchar2, 其中( n 开头的是国家字符集, 没有n开头的是数据库字符集 )一般也不怎么使用国家字符集variable_name VARCHAR2(max_length [char | byte]); 其中 char 说明以字符为单位, byte说明以字节为单位.如果忽略了char或 byte( 我们一般都这样做, 定义时直接 varchar2(10) 类似这种), 这时, 要看初始化参数NLS_LENGTH_SEMANTICS 查看默认的到底是使用 char 还是 byte.例如:declaresmal 阅读全文
posted @ 2014-02-13 15:40 神之一招 阅读(428) 评论(0) 推荐(0) 编辑
摘要:数据类型char, Ncharvarchar2, Nvarchar2clob, Nclobnumbernumber(9, 2); -- 定点小数, 小数点左边7位, 右边2位number, 浮点小数number(2) 整数pls_integer: 由硬件实现算法的整数类型, 顾名思义, 效率高, 但... 阅读全文
posted @ 2014-02-13 10:59 神之一招 阅读(397) 评论(0) 推荐(0) 编辑
摘要:挂起语句, 是指数据库 Hang 到那不能动了, 触发的.1. DML 触发器这种类型的触发器对于开发人员都很常见, 其他类型的触发器主要是给DBA使用的.配置触发器,我们需要回答以下问题:触发器应该是对整个DML语句触发一次, 还是要为语句涉及的每一行都触发一次 ?触发器是应该在整个语句开始之前或... 阅读全文
posted @ 2013-12-16 10:57 神之一招 阅读(734) 评论(0) 推荐(0) 编辑
摘要:代码模块化, 即将一大块代码拆成若干小块(过程), 然后就可以在其他模块调用这些模块了, 这样, 重用性更好, 也方便管理.过程: 过程是一个可以像执行 PL/SQL 语句一样调用的程序, 一个过程可以执行一个或多个动作. 我们可以通过参数列表向过程传递或者从过程传出信息.函数: 函数是一个通过RETURN 语句返回数据的程序, 使用起来就像是一个 PL/SQL 表达式. 我们可以通过参数列表传入参数, 也可以通过参数列表传出参数, 不过通常情况下这么做并不好.数据库触发器: 触发器是当数据库中发生了某些事件时, 所触发执行的一系列命令包: 一个由若干函数, 过程, 类型以及变量一起组成的并被 阅读全文
posted @ 2013-12-16 10:56 神之一招 阅读(1320) 评论(0) 推荐(0) 编辑
摘要:所谓包, 就是把一组PL/SQL 的代码元素组织在一个命名空间下.另外, 包的用法就类似java中的类.( 有封装, 有重载, 没有继承和多肽) 1 create or replace procedure process_employee( 2 employee_id_in IN emplo... 阅读全文
posted @ 2013-12-16 10:56 神之一招 阅读(419) 评论(0) 推荐(0) 编辑
摘要:动态SQL 是指在执行时才构建 SQL 语句, 相对于静态 sql 的编译时就已经构建.动态PLSQL 是指整个PL/SQL代码块都是动态构建, 然后再编译执行的.作用:1. 可以支持 DDL 语句, 静态 sql 只能支持 DML 语句.2. 支持web 引用程序的查询意愿( 一个网络应用程序的常见需求是用户可以指定他们想看到的列, 以及改变数据的排序方式 )2. 可以将业务逻辑先放在表中, 然后再动态编译.NDS 是我们首选的动态解决方案.NDS 执行动态语句的办法就是 execute immediate 和 open for 语句.我们可以把 execute immediate 用于除了 阅读全文
posted @ 2013-12-05 11:20 神之一招 阅读(3176) 评论(0) 推荐(1) 编辑
摘要:数据提取 -- 游标游标只是一个指向某个结果集的指针.声明游标: cursor employee_cur IS select * from employees;打开游标: open employee_cur;提取数据: fetch employee_cur into employee_rec; -- employee_rec 是employees%rowtype类型关闭游标: close employee_cur;也可以多表 join 作为结果集.declare cursor joke_feedback_curis select j.name, r.laugh_volume, c.name f 阅读全文
posted @ 2013-12-05 11:20 神之一招 阅读(918) 评论(0) 推荐(0) 编辑
摘要:使用循环应考虑的因素1. 循环什么时候结束2. 什么时候测试是否该结束循环3. 采用这种循环的原因1. 普通循环(简单循环)使用场合, 不能确定循环执行多少次, 要求循环至少执行一次.另外, 退出循环时, 可以使用如下两种方式:EXIT; // 直接退出EXIT WHEN condition // 有条件退出2. for 循环使用场合,只有有限次数循环, 又不想过早的退出循环.使用循环规则:不要声明循环索引, 例如下例中的 l_current_year, plsql会自动的用一个integer类型的局部变量作为循环索引》在范围部分使用表达式(包括下边界和上边界)会在循环开始时被求值一次, 范围 阅读全文
posted @ 2013-12-03 11:36 神之一招 阅读(631) 评论(0) 推荐(0) 编辑
摘要:如果 PLSQL发生了错误, 无论是系统错误还是应用错误, 都会抛出一个异常, 当前 PL/SQL 块中执行单元会暂停处理, 如果当前块有一个异常处理单元的话, 控制会转移到当前块的异常处理单元来处理异常, 完成了异常处理后就不能再返回到当前块, 相反, 控制会转移到外层包伟块, 如果有的话.在Pl... 阅读全文
posted @ 2013-12-03 11:36 神之一招 阅读(1348) 评论(0) 推荐(0) 编辑
摘要:1. 条件语句 if salary > 40000 or salary is NULL then give_bonus(employee_id, 500); end if; if condition then --- else --- end if; if condition then statement1 elsif condition then statement2 else statement3 end if; 例如:IF salary >= 10000 AND salary 20000 AND salary 40000 THEN give_bouns(employee_id 阅读全文
posted @ 2013-11-29 10:27 神之一招 阅读(359) 评论(0) 推荐(0) 编辑
摘要:PL/SQL 块结构最小的有意义的代码单元叫做 块(block). 一个块是一组代码, 这个块给出了执行边界, 也为变量声明和异常处理提供了作用范围, pl/sql 准许我们创建匿名块和命名块, 命名块包括 包, 过程, 函数, 触发器或者对象类型.一个Pl/SQL 块应该包含4个单元header ... 阅读全文
posted @ 2013-11-20 15:40 神之一招 阅读(297) 评论(0) 推荐(0) 编辑
摘要:1 /* 2 * chap 02 3 * ------------------------------------------------- 4 */ 5 6 -- 01 7 create or replace function wordcount(str in varchar2) 8 ... 阅读全文
posted @ 2013-11-18 15:05 神之一招 阅读(978) 评论(0) 推荐(0) 编辑

1