标签存档: PL/SQL

Oracle中rownum的原理

oracle pl/sql rownumOracle中的rownum是一种伪列,它会根据返回记录生成一个序列化的数字。利用rownum,我们可以生产一些原先难以实现的结果输出,rownum是根据sql查询出的结果给每行分配一个逻辑编号,所以你的sql不同也就会导致最终rownum不同。因为它是个伪列的这个特殊性,我们在使用时也需要注意一些事项,不要掉入“陷阱”。在Oracle中,要按特定条件查询前N条记录,可以加上rownum条件来搞定它:

继续阅读 »

Oracle自定义函数中select语句令人费解的性能问题

oracle 索引索引既可以隐式调用,也可以显式调用。索引的优化对数据库的性能至关重要。在Oracle中开发一个对帐函数时,碰到了奇怪的现象,同样的语句放在函数中,与放在主程序中执行,性能差距数百倍,后来用性能工具分析才发现原来是某条select语句的索引引用不同,在函数中强制指定索引也无法生效。但同样的语句,区别只在于一个放在了函数中,Oracle在解释时为什么会厚此薄彼?似乎牵涉到一些深层的东西,暂时无法深究下去。

继续阅读 »

PL/SQL Developer中的版本控制

pl/sql developer 版本 控制手头的项目以C为主,oracle库为辅,因而未对数据库进行严格的用户权限分配,多人用同一用户开发存储过程等,由于pl/sql developer可直接编辑数据库中的对象,所以在开发中一直有种恐惧心理,如果别人不小心删了我的过程或修改了怎么办?所以就寻找pl/sql developer下的版本控制系统。好在它有一个vcs插件,虽说只支持MS的SCC接口的,不过也聊胜于无了。

继续阅读 »

PL/SQL Developer居然不是Oracle的?

sql developer pl/sql在oracle产品中怎么都找不到pl/sql developer,也许是因为oracle收购的产品太多,不值得把这么个20M的东西放在主页上?然后就看到了sql developer,是oracle提供的一个基于java的跨平台的sql工具。下载32位的最新版3.1,要求JDK1.6以上,解压缩后,运行,选择jre目录,不行,选择JDK内的jre目录,提示内存怎么怎么着。进入目录内的sql developer子目录,找到一个批处理,里面的java参数似乎有xms内存选项,双击,N久之后启动成功,自动中文界面。

继续阅读 »

Oracle的PLS-00231 错误分析

oracle package functionSybase中没有Function的概念(Java的不算),所以存储过程都需要用Exec调用。而Oracle这方面更灵活一些,可以声明Function和Procedure。除了语法略有差异,Function必须作为表达式的一部份调用,且可以用return返回一个值。而且Oracle更提供了Package语法,可以将一组相关PL/SQL元素封装起来,提供一些面向对象特点,类似于其它语言中的类,当然,它不需要实例化。而在内部,Sql和PL/SQL似乎是两套相对独立的解析器。

继续阅读 »

PL/SQL中的条件编译

oracle pl/sql 条件编译PL/SQL中居然有类似于C一样的条件编译指令,这对在过程中以dbms_output.put_line输出调试信息的方式很有用,当数据库功能中有版本区别时,也可以用条件编译指令在旧版本禁用某些功能。条件编译指令由指令控制标记“$”和普通的 PL/SQL 文本组成。条件编译使用三个指令:选择、查询和错误。特殊的触发器字符“$”代表条件编译指令。选择指令是条件编译机制的重要组成部分,而查询和错误指令支持有用的附加功能。

继续阅读 »

PL/SQL中rpad/lpad的使用

oracle pl/sql rpad lpadPL/SQL中似乎没有生成重复字符串的函数,可以用lpad/rpad来客串一下: select lpad(‘x’,10,’x’) from dual; 将生成1个10个’x’的字符串,值得注意的是,此函数理解应该是在第一个参数’x’的左边补第三个参数’x’,补到长度为10为止。那么正常理解,lpad(”,10,’x’)将可同样生成10个字符的’x’串?结果却不是这样,结果为空串,这似乎应了所有空串参予的运算结果仍为空的逻辑。 length(”)值为几?我期望是0,结果却是null。

继续阅读 »

Oracle中NVARCHAR2的问题!

oracle nvarchar2 中文查过简单的资料,Oracle中NVARCHAR2可用于正确处理汉字,每位可对应于一个汉字或英文,如nvarchar2(10)可容纳10汉字,但varchar2(10)则只能容纳10英文或5汉字,其余似乎无甚区别。 然而在函数传参时,使用nvarchar2,在PL/SQL Developer中调试时却总是显示为null,一直不清楚原因,但是函数运行时却正常。后查资料,才知大约是PL/SQL Developer对多字节字符的支持有问题,所在在调试器中nvarchar2变量无法显示,但实际上是有值的。

Oracle中的显式游标和隐式游标的使用区别

oracle 游标 显式 隐式游标是SQL的一个内存工作区,由系统或用户以变量的形式定义。在某些情况下,需要把数据从存放在磁盘的表中调到计算机内存中进行处理,最后将处理结果显示出来或最终写回数据库。这样数据处理的速度才会提高,否则频繁的磁盘数据交换会降低效率。用数据库语言来描述游标就是映射在结果集中一行数据上的位置实体,有了游标,用户就可以访问结果集中的任意一行数据了。在Oracle中,有显式游标和隐式游标之分。

继续阅读 »

Oracle自定义数据类型作表列时的访问

oracle 自定义数据类型Oracle除了预定义类型之外,还可以自定义类型,根据需求用户可以自己定义记录数据类型(Record)和记录表类型(Table),其中记录数据类型Record存储是一条记录,记录表类型Table用来存储多条记录。如果记录数据类型Record是一维数组的话,记录表类型Table就是二维数组。Oracle中的自定义数据类型,如嵌套表,既可在PL/SQL中使用也可用作表的一列,比如我们用以下定义:

继续阅读 »

第 1 页,共 2 页12