发表于: DB/ES | 作者: | 日期: 2008/11/24 12:11

Oracle用Start with…Connect By子句递归查询
Start with…Connect By子句递归查询一般用于一个表维护树形结构的应用。
创建示例表:
CREATE TABLE TBL_TEST
(
ID NUMBER,
NAME VARCHAR2(100 BYTE),
PID NUMBER DEFAULT 0
);

插入测试数据:
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(‘1′,’10’,’0′);
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(‘2′,’11’,’1′);
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(‘3′,’20’,’0′);
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(‘4′,’12’,’1′);
INSERT INTO TBL_TEST(ID,NAME,PID) VALUES(‘5′,’121′,’2’);

从Root往树末梢递归
select * from TBL_TEST
start with id=1
connect by prior id = pid

从末梢往树ROOT递归
select * from TBL_TEST
start with id=5
connect by prior pid = id

参考:
http://blog.csdn.net/Caesar_Gu/archive/2008/01/21/2055985.aspx
http://oracle.chinaitlab.com/exploiture/734006.html
http://blog.sina.com.cn/s/blog_4bfad52101000b93.html
http://hi.baidu.com/suofang/blog/item/a58bdd5829d5e583800a1812.html

http://www.builder.com.cn/2007/1005/536404.shtml
http://deqiallen.javaeye.com/blog/92794

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/24 08:11
标签: ,,

碰到了如下的情况:只能局部滚动而不能全屏滚动,同时又不想用iframe。于是想到了固定一个div的行高,仅仅强制div内的内容滚动。参考代码如下:

<div style="height:220px;width:100%;overflow:auto;">

....some other thing....

<div>

效果如下:

aaa
aaa
aaa
aaa
aaa

overflow 标签的说明
overflow : visible | auto | hidden | scroll

参数:

visible :  不剪切内容也不添加滚动条。假如显式声明此默认值,对象将被剪切为包含对象的window或frame的大小。并且clip属性设置将失效
auto :  此为body对象和textarea的默认值。在需要时剪切内容并添加滚动条
hidden :  不显示超过对象尺寸的内容
scroll :  总是显示滚动条

评论关闭
发表于: DB/ES | 作者: | 日期: 2008/11/24 07:11

Oracle格式化数字的方法
2008-07-16 10:50
to_char,函数功能,就是将数值型或者日期型转化为字符型。

比如最简单的应用:

/*1.0123—>’1.0123’*/
Select TO_CHAR(1.0123) FROM DUAL
/*123—>’123’*/
Select TO_CHAR(123) FROM DUAL
接下来再看看下面:

/*0.123 —> ‘.123’ */
SELEC TO_CHAR(0.123) FROM DUAL
上面的结果 ‘.123’ 在大多数情况下都不是我们想要的结果,我们想要的应该是 ‘0.123’。

我们来看一下to_char函数的具体用法:

TO_CHAR ( n [, fmt [, ‘nlsparam’]] )该函数将NUMBER类型的n按数值格式fmt转换成VARCHAR2类型的值。’nlsparams’指定由数值格式的元素返回的字符,包括:

.小数点字符

.组分隔符

.本地钱币符号

.国际钱币符号

变元的形式为:

‘NLS_NUMERIC_CHARACTERS=”dg” NLS_CURRENCY=”tcxt” NLS_ISO_CURRENCY=territory’

其中d为小数点字符,g为组分隔符。

例 :TO_CHAR (17145,’L099G999′,’NLS_NUMERIC_CHARACTERS=”.,” NLS_CURRENCY=”NUD”‘)=NUD017,145
通过上面的了解,再查看fmt的一些格式,我们可以用以下表达式得到’0.123’的值:

/*0.123 —> ‘ 0.123′ */
Select TO_CHAR(0.123,’0.999’) FROM DUAL
/*100.12 —> ‘######’ */
Select TO_CHAR(100.12,’0.999′) FROM DUAL
/*1.12 —> ‘ 1.120′ */
Select TO_CHAR(1.12,’0.999’) FROM DUAL
‘ 0.123’是出来了,可是前面又多了一个空格。

对于 100.12 的值却是######,以及’1.12’的值变成了 ‘1.120’。

我们重新确定一个新的需求:

1、去空格

2、小数点最多4位,最少保留2位。

1—>’1.00’;1.1—>’1.00’;1.12–>’1.12’;1.1234—>’1.1234’;

1.12345—>’1.1235′

最终实现如下:

/*
FM :除空格
9999999.0099:允许小数点左边最大正数为7位,小数点右边最少2位,最多4位,且在第5位进行四舍五入
*/
Select TO_CHAR(123.0233,’FM9999999.0099′) FROM DUAL

from:http://blog.csdn.net/feiyu1001/archive/2008/10/23/3129836.aspx

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/23 09:11
标签: ,

window.opener.location.reload();

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/22 06:11
标签:

总结了HTTP常用状态码。 More …

评论关闭
发表于: sitebuild | 作者: | 日期: 2008/11/22 04:11

很强大:
http://www.codeproject.com/KB/scripting/jvk.aspx

评论关闭
发表于: computer | 作者: | 日期: 2008/11/22 01:11

骆驼式命名法:

骆驼式命名法是通过单词的首字母大些来区分变量或函数名、类名的一个命名方式。因其大写的首字母类似骆驼的驼峰而得名。以下是一个例子:

printEmployeeName();

介绍:
http://baike.baidu.com/view/1165629.html

匈牙利命名法:
匈牙利命名法广泛应用于象Microsoft Windows这样的环境中。基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。这种命名方式由一位就职于微软的匈牙利的程序员查尔斯- 西蒙尼(Charles Simonyi) 提出。 以下是一个例子:
hwnd : h 是类型描述,表示句柄, wnd 是变量对象描述,表示窗口,所以 hwnd 表示窗口句柄。

匈牙利命名法关键是:标识符的名字以一个或者多个小写字母开头作为前缀;前缀之后的是首字母

详细介绍见:
http://baike.baidu.com/view/419474.htm

大写的一个单词或多个单词组合,该单词要指明变量的用途。

下划线命名法:

下划线命名法是通过下划线来区分变量、函数名、类名中的单词的一种方法。以下是一个例子:

print_employee_name();

  
帕斯卡(pascal)命名法:

与骆驼命名法类似。只不过骆驼命名法是首字母小写,而帕斯卡命名法是首字母大写,如:

DisplayInfo();
string UserName;

介绍:
http://baike.baidu.com/view/1276459.htm

在项目实践中可以结合使用这几种命名方式。比如,JSP文件的命名采用下划线式命名法,而java类和方法则可以采用骆驼式命名法。

评论关闭
发表于: DB/ES | 作者: | 日期: 2008/11/22 09:11

基本概念
数据库连接串主要用于建立对远程数据库的访问方法,可以直接读取远程Oracle的数据,或者直接修改。数据库连接串可以是公用连接PUBLIC或者私有连接PRIVATE。这一点和同义词很相像。

创建语法
CREATE DATABASE LINK TEST CONNECT TO USERNAME IDENTIFIED BY PASSWORD USING ‘CONNECT_STRING’;
解释:
TEST是数据库连接串的名字。以后就通过这个名字来进行调用远程数据库的内容。
USERNAME是用来连接到远程数据库的合法Oracle用户名。
PASSWORD为该用户连接到Oracle时候的合法密码。
CONNECT_STRING为该Oracle数据库所在的主机上的tnsnames.ora文件里边定义的数据库连接串。

使用方法
SELECT COUNT(*) FROM TABLE_NAME@DB_LINK WHERE WHERE_CLAUSE;//查阅远程数据库的内容。

UPDATE TEST.TEST@DB_LINK SET SO_NBR=NEW_SO_NBR WHERE WHERE_CLAUSE;//修改远程数据库的内容。

在实际使用过程中,还可以通过为这个远程表建立一个同义词来进一步增加透明性,使该数据库连接串对于程序和开发人员来讲完全透明。
CREATE SYNONYM TABLE_NAME FOR TABLE_NAME@DB_LINK;

数据库连接的管理
1。如何知道当前用户、当前系统中有哪些数据库连接串?
SELECT * FROM USER_DB_LINKS;
这个查询会给出当前用户的数据库联接的名字、联接用户名、联接密码、要连接的主机以及创建时期。
SELECT * FROM DBA_DB_LINKS;
这个查询会给出当前系统中所有的数据库联接的创建用户、联接用户名、要连接的主机以及创建时期。
SELECT * FROM V$DBLINK;
这个查询会给出当前打开的数据库联接。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

数据库链接(DATABASE LINK)是在分布式环境下,为了访问远程数据库而创建的数据通信链路。数据库链接隐藏了对远程数据库访问的复杂性。通常,我们把正在登录的数据库称为本地数据库,另外的一个数据库称为远程数据库。有了数据库链接,可以直接通过数据库链接来访问远程数据库的表。常见的形式是访问远程数据库固定用户的链接,即链接到指定的用户,创建这种形式的数据库链接的语句如下:

CREATE DATABASE LINK 链接名 CONNECT TO 账户 IDENTIFIED BY 口令 USING 服务名;

创建数据库链接,需要CREATE DATABASE LINK系统权限。

数据库链接一旦建立并测试成功,就可以使用以下形式来访问远程用户的表。

表名@数据库链接名

例:在局域网上创建和使用数据库链接。
步骤1:创建远程数据库的服务名,假定局域网上另一个数据库服务名为MYDB_REMOTE。
步骤2:登录本地数据库SCOTT账户,创建数据库链接:

CONNECT SCOTT/TIGER@MYDB

CREATE DATABASE LINK abc CONNECT TO scott IDENTIFIED BY tiger USING ‘MYDB_REMOTE’;

执行结果为:

数据库链接已创建。

查询远程数据库的数据:

SELECT * FROM emp@abc;

结果略。

步骤4:一个分布查询:

SELECT ename,dname FROM emp@abc e,dept d WHERE e.deptno=d.deptno;

结果略。

说明:在本例中,远程数据库服务名是MYDB_REMOTE,创建的数据库链接名称是abc.emp@abc表示远程数据库的emp表。步骤4是一个联合查询,数据来自本地服务器的dept表和远程服务器的emp表。如果编程人员要在一个表中查找许多行,结果中的每个行都会查找其他表中的数据,最后,编程人员创建了独立的UPDATE命令来成批地更新第一个表中的数据。与此类似的任务可以通过在set子句中使用多列子查询而在一个UPDATE命令中完成。当能够在单一的SQL命令中完成任务,何必要让数据在网上流来流去的?建议用户认真学习如何最大限度地发挥SQL的功能。

参考:
http://blog.chinaunix.net/u/15454/showart_510638.html
http://www.blogjava.net/soddabao/archive/2007/03/09/102821.aspx
http://moonsoft.itpub.net/post/15182/125559

Creating Database Links

评论关闭
发表于: DB/ES | 作者: | 日期: 2008/11/22 09:11

概述
同义词是表、索引、视图或者其他模式对象的一个别名。同义词只是数据库对象的一个替代名,在使用同义词的时候,oracle简单的将它翻译为对应的基础数据对象的名称。oracle只在数据字典中保存同义词的定义描述,因此同义词并不占用任何实际的存储空间。

在以下的场景中DBA可以考虑建同义词:
1:为重要的数据库对象创建同义词,以便隐藏对象的实际名称;
2:在分布式数据库系统中,为存储在远程库中的对象创建同义词,使用户可以像使用本地对象一样对远程对象进行操作;
3:为名称很长或者很复杂的数据库对象创建同义词,以简化SQL语句。

在oracle中,同义词分为两类:
1:公有同义词。公有同义词由一个特殊的用户组PUBLIC所拥有,数据库中所有的用户都可以使用公有同义词。
2:私有同义词。由创建它的用户(或模式)所拥有。

创建同义词语句

create public synonym table_name for user.table_name;

其中第一个user_table和第二个user_table可以不一样。

此外如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link;

当然,你可能需要在user用户中给当前用户(user2)授权: grant select/delete/update on user2

删除同义词

drop public synonym table_name;

查看所有同义词

select * from dba_synonyms;

同义词拥有如下好处:
节省大量的数据库空间,对不同用户的操作同一张表没有多少差别;
扩展的数据库的使用范围,能够在不同的数据库用户之间实现无缝交互;
同义词可以创建在不同的数据库服务器上,通过网络实现连接。

评论关闭
发表于: DB/ES | 作者: | 日期: 2008/11/22 08:11

sequence概述
模式对象的一种,能够以串行方式生成一系列顺序整数。其最大的有点是可以在多用户并发环境中为各个用户生成不会重复的顺序整数,基本上可以认为序列天生就是为主键而存在的。使用create sequence 语句创建序列之后,oracle将序列的定义描述存储在数据字典中,序列并不占用实际的存储空间。 More …

评论关闭