substr怎么用excel自定义函数编写去编写

  【IT168 技术文档】

  3.调用含有外部的jar的JAVA类

  3.1.3查询是否注册成功

  PL/SQL操作EXCEL有多种方法,但都不理想。比较了一下,还是通过JAVA的方法比较适用。

  说明:此方法操作文本尚可,对于EXCEL这种COM文件并不可行。网络大多数所谓的PL/SQL操作EXCEL, 也是使用cvs这种简单的格式。如果要读入稍微复杂点的EXCLE模板文件,utl_file就挂掉了。

  说明:Object Link and embed,有学过VB/VC的同学们应该很熟悉。可惜ORACLE本身并不支持OLE2,OLE2是ORACLE FORMS集成的一个OLE接口。所以限制此方法的使用范围。另外更重要的OLE2无法在B/S架构中使用,只能在传统的FORM C/S程序中使用。

  4. 使用JAVA存储过程(通过POI包,这也是本文的重点)

  注:这个问题折腾了我很久,注册JAR包有两种方法。1.使用DBMS_JAVA,这种方法要自行上传jar包到服务器上。2.是使用loadjava。这也是能google到最多的方法,但loadjava在ORACLE9i以后就不单独提供了,而是集成在JDeveloper中,而可恶的JDeveloper是有版本兼容性的问题。

  4.2.3查询一下是否注册成功(注:如果注册成功,STATUS应该为VALID)。

  5. 使用其他编程语言操作 说明:此方法完全脱离了ORACLE,已超出了ORACLE的范围,本文不讨论。

  Exception,一些中文教材译为例外,我认为这种翻译很失水准。Exception大多数的程序语言都这个捕获机制,但基本都是译为异常。为什么在PL/SQL中就搞成“例外”.

  一般的PL程序员都这样写异常处理:

  ORACLE有提供两个函数来实现捕获异常信息,SQLCODE:错误代码、SQLERRM:错误描述。事实上,上述写法主要是方便,也没有根本性的错误。但PL/SQL与JAVA相似,异常捕获也是有层次的。OTHERS会捕获到ORACLE全部的异常,这对于大型数据库而言,也是会影响到效率的。

  这样如果发生自定异常,就不会捕获ORACLE的全部异常了。在PL/SQL如果没有定义异常,那么就相当于JAVA中抛出异常THROWS,抛出的异常由调用该块的PL/SQL程序负责处理。 另外,异常与事务,ORACLE的书上都只说异常是不会中止事务。但拿上面那段代码去测试,就会异常发生时事务是有回滚的。那么是否说明异常不会中止事务的说法不正确的? 再测试下面这段代码,异常就不会中止事务了。

  总结:异常一般是不会中止事务的,但如果PL/SQL块将异常抛出,则事务会回传给调用环境,由服务器自动进行事务中止操作。

  PL/SQL面向对象编程

  1、 创建TYPE规范

  2、创建TYPE主体

  --有多少个数据成员,在实例化TYPE时,必须都初始化,这一点跟JAVA的构造器类似,只是JAVA没有强制要求。

  注:上面创建的TYPE都是临时对象,随着块的结束,对象生命也结束了。下面将会说明如何创建持久对象。

  4、持久化TYPE(也就是创建对象表)

  5、在对象表中INSERT些数据

  注:①这边我们可以直接象关系表一样使用对象表,也不必进行初始化。ORACLE会自动初始化对象。 ②TYPE不能使用PACKAGE的对象等等,如:UTL_SMTP。

  PL/SQL实现字符串转成数组

  这个功能在JAVA中比较简单,String有提供一个split的方法实现此功能。在PL/SQL其实也不难,用substr与instr联合使用就可以实现。

  跟DBA在随聊时,提到一个概念CBO,觉得很新奇。追问之下,得到下面这篇文章。

  RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。

  CBO方式:它是看语句的代价(Cost),这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有少行、每行的长度等信息。这些统计信息起初在库内是没有的,是做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些应及时更新这些信息。

  注意:走索引不一定就是优的,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时全表扫描(full table scan)是最好

  Rule:基于规则的方式。

  Choolse:默认的情况下Oracle用的便是这种方式。指的是当一个表或或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。

  First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。 All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走RBO的方式。

  设定选用哪种优化模式:

  为什么表的某个字段明明有索引,但执行计划却不走索引?

  1、优化模式是all_rows的方式

  2、表作过analyze,有统计信息

  3、表很小,上文提到过的,Oracle的优化器认为不值得走索引。

  1.从代码反向生成E-R视图

???????????

??????????? 看到各种微博、微信公众号随意转载,甚至加上自家的水印,特此声明—— 仅

允许个人学习目的带源链接及作者转载使用,谢谢!

我要回帖

更多关于 excel自定义函数编写 的文章

 

随机推荐