2009年4月16日星期四

Oracle SQL常用函数总结(1)


1、Substr(arg1,arg2,arg3)
说明:arg1是待分割的字符串,arg2和arg3分别是起始分割字符号
其中arg3可选
例:substr(12345, 1,4) 结果为 1234
补充:两个参数,即arg3为空的用法在SQL SERVER中不适用

2、Instr(arg1,arg2,arg3,arg4)
说明:arg1为待搜索内容,arg2为搜索内容,arg3为搜索起始位置,arg4为搜索匹配位置,即第几次匹配(arg4默认为1)
例:Instr('CORPORATE FLOOR','OR', 3, 2) 结果为 14

3、Concat(arg1,arg2)
说明:将arg1和arg2连接起来,类似于使用||符号进行连接
例:Concat(1,2) 结果为 12

4、Trim(arg)
说明:默认为去掉arg中的前后空格
例:Trim(‘ 12345 ‘) 结果为 12345 等同于使用 Trim(‘ ’ from ‘ 12345 ’)
补充:Trim又可以细分为LTrim和RTrim,分别为去掉左、右空格。
其他用法:Trim(arg1 from arg2)表示 若arg2以arg1字符开头或结束,则将所有连续的arg1字符去掉,例如 Trim(‘s’ from ‘stuff’) 结果为tuff,Trim(‘f’ from ‘stuff’)结果为 stu
为使意义更清晰,有时还会添加leading和trailing来区分arg2的匹配位置,例如 Trim(‘t’ from ‘test’) 结果为 es
Trim(leading ‘t’ from ‘test’) 结果为 est
Trim(trailing ‘t’ from ‘test’) 结果为 tes

5、Length(arg)
说明:计算arg的长度
例:Length(12345) 结果为 5

6、Ascii(arg)
说明:返回与指定字符对应的十进制数
例:Ascii(‘A’) 结果为 65

7、Chr(arg)
说明:返回与指定整数对应的字符
例:Chr(65) 结果为 A

8、Lower(arg)
说明:将arg全部变为小写
例:Lower(‘TesT’) 结果为 test

9、Upper(arg)
说明:将arg全部变为大写
例:Upper(‘TesT’) 结果为 TEST

10、Initcap(arg)
说明:将arg的首字母变为大写
例:Initcap(‘test’) 结果为 Test

11、LPad(arg1,arg2,arg3) & RPad(arg1,arg2,arg3);
说明:LPad和RPad分别为在arg1左、右粘贴字符,arg2表示字符串总占据长度,arg3表示的是如果arg1不能占据所有长度,则使用什么进行粘贴。
例:LPad(‘abc’,5,’*’) 结果为 **abc RPad(‘abc’,5,’*’) 结果为 abc**
补充:若arg1的长度大于arg2规定长度,则将arg1按照arg2的长度从第一个字符进行截取,此时arg3将不影响结果,例:LPad(‘abcdefg’,5,’*’) 结果为 abcde

12、Replace(arg1,arg2,arg3)
说明:arg1表示待处理的字符串
arg2表示待替换的字符
arg3表示要替换成为的字符
例:Replace('string test','t','*') 结果为s*ring*es*

13、ABS(arg)
说明:返回arg的绝对值
例:ABS(-100) 结果为 100
ABS(100) 结果为 100

14、Ceil(arg)
说明:返回大于或等于arg数字的最小整数
例:Ceil(3.14) 结果为 4

15、Floor(arg)
说明:返回arg数字的整数部分(取整)
例:Floor(3.14) 结果为 3

16、Sin(arg)
说明:返回arg数字的正弦值
例:Sin(1.5) 结果为 0.997494986604054

17、ASin(arg)
说明:返回反正弦的值
例:ASin(0.5) 结果为 0.523598775598299

18、Cos(arg)
说明:返回arg数字的余弦值
例:Cos(-3.1415927) 结果为 -0.999999999999999

19、ACos(arg)
说明:返回反余弦的值
例:ACos(-1) 结果为 3.14159265358979

20、Tan(arg)
说明:返回arg数字的正切值
例:Tan(20) 结果为 2.23716094422474

21、ATan(arg)
说明:返回arg数字的反正切值
例:ATan(1) 结果为 0.785398163397448

22、Exp(arg)
说明:返回e的arg次方根
例:Exp(2) 结果为 7.38905609893065

23、Ln(arg)
说明:返回arg的对数
例:Ln(1) 结果为 0

24、Log(arg1,arg2)
说明:返回以arg1为底arg2的对数
例:Log(2,4) 结果为 2

25、Mod(arg1,arg2)
说明:返回arg1除以arg2的余数
例:Mod(3,2) 结果为 1

26、Power(arg1,arg2)
说明:返回arg1的arg2次方
例:Power(2,3) 结果为 8

27、Sign(arg)
说明:取arg的符号,若arg>0,返回1
若 arg=0,返回0
若arg<0,返回-1
例:Sign(2), Sign(0), Sign(-2) 结果分别为 1,0,-1



28、Sinh(arg)
说明:返回双曲线的正弦值
例:Sinh(20) 结果为 242582597.704895

29、Cosh(arg)
说明:返回双曲线的余弦值
例:Cosh(20) 结果为 242582597.704895

30、Sqrt(arg)
说明:返回数字arg的平方根
例:sqrt(64) 结果为 8



详细的SQL脚本请查看:Oracle SQL 内置函数总结.sql


在Region之间传递Event


概述

本文主要介绍如何在ADF应用中实现不同Region之间的event的传递。

下面以RegionA和RegionB为例,详细说明如何实现在Region之间传递event。

需求:在RegionA中点击导航栏中的任意一按钮时,在RegionB中触发相同事件。


实现

1、新建ADF应用,并根据需要创建基于Employees和Departments两个表的BC(EO/VO/AM)。

2、在ViewController项目中创建两个Bounded-Task-Flow with Fragments,这里名字分别为RegionA-task-flow和RegionB-task-flow。

3、从“Component Pallete”中分别拖“View”到刚创建成功的两个Task-Flow中,名字分别为RegionA和RegionB,双击根据向导生成两个.jsff的fragments,生成后的名字应分别为RegionA.jsff和RegionB.jsff。



4、打开RegionA.jsff,从“Data Controls”中拖动EmployeesView1到该fragment,根据提示生成form,并带有导航按钮。

5、同样的,打开RegionB.jsff,从“Data Controls”中拖动DepartmentsView1到该fragment,根据提示生成带有导航按钮的form。

6、新建.jspx页面,这里命名为main.jspx,使用“Panel Splitter”Layout进行布局,将页面分割成为左右两部分。分别将RegionA-task-flow和RegionB-task-flow拖到两部分中,生成后的页面如图所示: 


7、双击打开RegionA.jsff的PageDef文件,为其导航按钮添加event,查看“Structure”面板,以First按钮为例:在First按钮上点击右键,在“Insert inside First”中选择events,继续在events中点击右键,在“insert inside events”中选择event,命名为FirstEvent,为其他按钮添加同样的操作。进而对RegionB.jsff的PageDef中的导航按钮也添加同样的操作,完成后保存。


8、打开main.jspx页面,在“Structure”面板中的PageDef上点击右键,选择“Edit Event Map”,如图设置event的mapping关系,将所有的event都进行设置。


9、保存以上设置,运行main.jspx页面。
最终运行结果:


详细代码请查看:howtopasseventbetweenregions.rar

2009年4月15日星期三

监听dialog的取消按钮事件

function openPopup(evt){

var dialog = AdfPage.PAGE.findComponent('dlg2');

dialog.HandleEvent = function(event) {

if (event.getType() == AdfDialogEvent.EVENT_TYPE) {

event.propagatesToServer = function(){

return true;

}

}

}

AdfUIDialog.superclass.HandleEvent.call(this, event);

}

Manage Bean中向客户端写js

private void addScript(String script) {

FacesContext fc = FacesContext.getCurrentInstance();

ExtendedRenderKitService erks =

Service.getRenderKitService(fc, ExtendedRenderKitService.class);

erks.addScript(fc, script);

}

Oracle 数据库打开时出现ORA-16038

Oracle
10g默认启用日志归档,db_recovery_file默认为2GB,不清理日志一般经过一段时间的使用闪回区便被占满,造成数据库无法归档,无法启动的错误。一般ORA-16038、ORA-19809、ORA-00312这三个错误会同时出现。

解决方法通常包括:

1. 提高参数db_recovery_file_dest_size

  • 使用sqlplus /nolog登录,SQL> connect /as sysdba;

  • SQL> startup mount;
  • SQL> ALTER SYSTEM SET
    DB_RECOVERY_FILE_DEST_SIZE=4G SCOPE=BOTH;

  • SQL> alter database open;

2. 关闭闪回功能(如果你确实不再需要该功能)

  • 使用sqlplus /nolog登录,connect /as sysdba;
  • SQL> alter system archive log
    stop;

3. 删除无用的归档文件并更新rman记录

  • 查看对应initxxx.ora,找不到的话可以在$ORACLE_HOME下搜索,找对应SID的即可

  • 在initxxx.ora中找到# File
    Configuration部分,可以看到db_recovery_file_dest=XXXXX,即为数据闪回区的日志文件记录位置。

  • 进入闪回区目录,查看对应SID下的archivelog文件夹内内容,删除旧的日志归档文件

  • 使用RMAN命令,RMAN> connect target /
  • 使用命令RMAN> crosscheck archivelog
    all,该操作将标明哪些归档文件已被删除

  • 使用命令RMAN> delete expired archivelog
    all,该命令将删除rman controlfile中相应的记录

2009年4月14日星期二

使用Google文档发布日志到Blogger

最近工作之余在研究Google离线应用,而Google Docs,即Google文档基于Gears技术实现了离线撰写文档的功能,研究了下,发现可以使用Google文档发布文章到自己的博客中,由于我的博客就是Blogger,因此实现起来非常简单,以下是一些步骤:
1、安装Google Gears
2、打开Google文档 ,撰写离线日志。
3、日志撰写完成后,等方便上网时同步到自己的Google文档。
4、打开文档,选择“共享”中的“以网页形式发布”。

5、选择“张贴到博客”,根据向导完成简单的配置。
在完成了以上步骤,就可以离线编写日志,然后再联网后同步到Google文档中,再非常方便地发布到博客中。

2009年4月7日星期二

Jdeveloper11g Update2发布

Jdeveloper11g Update2终于发布了,相比前一个版本来说,修复了很多Bug
期待Jdeveloper越来越好。