--same function different database: find the first 5 rows
select top 5 * from some_table -- sql server
select * from some_table rownum >=1 and rownum<=5 -- oracle (begin at 1)
select * from some_table limit 0, 5 -- mysql (begin at 0)
select * from some_table limit 5 offset 0 -- postgreSQL (begin at 0)
--however, if you want to implement between 10 to 20 in SQL SERVER, you have to use following trick
select top 10 * from
(select top 20 * from some_table) t
order by t.primary_key desc
posted @
2006-12-13 14:34 Jcat 阅读(184) |
评论 (0) |
编辑 收藏
Most INSERT statements are the single-table variety, but Oracle also supports a multiple-table INSERT statement. With a multitable insert, you can make a single pass through the source data and load the data into more than one table.
[
ALL |
FIRST ]
WHEN condition THEN insert_into_clause [values_clause]
[insert_into_clause [values_clause]]...
[WHEN condition THEN insert_into_clause [values_clause]
[insert_into_clause [values_clause]]...
]...
[ELSE insert_into_clause [values_clause]
[insert_into_clause [values_clause]]...
]
If a WHEN condition evaluates to TRUE, the corresponding INTO clause is executed. If no WHEN condition evaluates to TRUE, the ELSE clause is executed.
The keyword ALL tells the database to check each WHEN condition. On the other hand, the keyword FIRST tells the database to stop checking WHEN conditions after finding the first TRUE condition.
--test case
create table insert_test_case
(
id number(1)
)

create table insert_test01
(
id number(1)
)

create table insert_test02
(
id number(1)
)

create table insert_test03
(
id number(1)
)

insert into insert_test_case values(1)
insert into insert_test_case values(2)
insert into insert_test_case values(3)
insert into insert_test_case values(4)
insert into insert_test_case values(5)
--3 rows inserted
insert first
when id=1 then into insert_test01 values(id)
when id=2 then into insert_test02 values(id)
when id=3 then into insert_test03 values(id)
select id from insert_test_case

--3 rows inserted
insert all
when id=1 then into insert_test01 values(id)
when id=2 then into insert_test02 values(id)
when id=3 then into insert_test03 values(id)
select id from insert_test_case
--1 rows inserted
insert first
when id=1 then into insert_test01 values(id)
when id=1 then into insert_test02 values(id)
when id=1 then into insert_test03 values(id)
select id from insert_test_case

--3 rows inserted
insert all
when id=1 then into insert_test01 values(id)
when id=1 then into insert_test02 values(id)
when id=1 then into insert_test03 values(id)
select id from insert_test_case
posted @
2006-12-13 13:32 Jcat 阅读(270) |
评论 (0) |
编辑 收藏
--
Test Case
create
table
sale(
sale_id
char
(
1
)
,sale_type
char
(
1
)
)
--
insert
into
sale
values
(
'
a
'
,
'
Y
'
);
insert
into
sale
values
(
'
b
'
,
'
N
'
);
insert
into
sale
values
(
'
b
'
,
'
Y
'
);
insert
into
sale
values
(
'
b
'
,
'
Y
'
);
insert
into
sale
values
(
'
c
'
,
'
Y
'
);
insert
into
sale
values
(
'
c
'
,
'
N
'
);
insert
into
sale
values
(
'
d
'
,
'
N
'
);
insert
into
sale
values
(
'
d
'
,
'
N
'
);
Count the number of 'Y' and the number of 'N' separately
--
full join
select
*
from
(
select
sale_id,
count
(
*
)
as
num_y
from
sale
where
sale_type
=
'
Y
'
group
by
sale_id
) sale_y
full
join
(
select
sale_id,
count
(
*
)
as
num_n
from
sale
where
sale_type
=
'
N
'
group
by
sale_id
) sale_n
using (sale_id)
order
by
sale_id
--
decode
select
sale_id
,
sum
(decode(sale_type,
'
Y
'
,
1
,
0
))
as
num_y
--
note using sum to implement count
,
sum
(decode(sale_type,
'
N
'
,
1
,
0
))
as
num_n
from
sale
group
by
sale_id
order
by
sale_id
--
case
select
sale_id
,
sum
(
case
when
sale_type
=
'
Y
'
then
1
else
0
end
)
as
num_y
--
note using sum to implement count
,
sum
(
case
when
sale_type
=
'
N
'
then
1
else
0
end
)
as
num_n
from
sale
group
by
sale_id
order
by
sale_id
Separate sale_type column
--
union all
select
sale_id, sale_type
as
type_y,
null
from
sale
where
sale_type
=
'
Y
'
union
all
select
sale_id,
null
, sale_type
as
type_n
from
sale
where
sale_type
=
'
N
'
order
by
sale_id
--
decode
select
sale_id
,decode(sale_type,
'
Y
'
,
'
Y
'
,
null
) as type_y
,decode(sale_type,
'
N
'
,
'
N
'
,
null
) as type_n
from
sale
--
case
select
sale_id
,(
case
when
sale_type
=
'
Y
'
then
'
Y
'
else
null
end
)
as
type_y
,(
case
when
sale_type
=
'
N
'
then
'
N
'
else
null
end
)
as
type_n
from
sale
posted @
2006-12-05 13:11 Jcat 阅读(252) |
评论 (0) |
编辑 收藏
功能:5秒后,自动跳转到同目录下的02view.html文件
1)html的实现
<head>
<meta http-equiv="refresh" content="5;url=02view.html">
</head>优点:简单
缺点:Struts Tiles中无法使用
2)javascript的实现
<script language="javascript" type="text/javascript">
setTimeout("javascript:location.href='02view.html'", 5000);
</script>
优点:灵活,可以结合更多的其他功能
缺点:受到不同浏览器的影响
3)结合了倒数的javascript实现(IE)
<span id="totalSecond">5</span>
<script language="javascript" type="text/javascript">
var second = totalSecond.innerText;
setInterval("redirect()", 1000);
function redirect(){
totalSecond.innerText=--second;
if(second<0) location.href='02view.html';
}
</script>
优点:更人性化
缺点:firefox不支持(firefox不支持span、div等的innerText属性)
3')结合了倒数的javascript实现(firefox)
<script language="javascript" type="text/javascript">
var second = document.getElementById('totalSecond').textContent;
setInterval("redirect()", 1000);
function redirect()
{
document.getElementById('totalSecond').textContent = --second;
if (second < 0) location.href = '02view.html';
}
</script>
4)解决Firefox不支持innerText的问题
<span id="totalSecond">5</span>
<script language="javascript" type="text/javascript">
if(navigator.appName.indexOf("Explorer") > -1){
document.getElementById('totalSecond').innerText = "my text innerText";
} else{
document.getElementById('totalSecond').textContent = "my text textContent";
}
</script>
5)整合3)和3')
<span id="totalSecond">5</span>
<script language="javascript" type="text/javascript">
var second = document.getElementById('totalSecond').textContent;
if (navigator.appName.indexOf("Explorer") > -1)
{
second = document.getElementById('totalSecond').innerText;
} else
{
second = document.getElementById('totalSecond').textContent;
}
setInterval("redirect()", 1000);
function redirect()
{
if (second < 0)
{
location.href = '02view.html';
} else
{
if (navigator.appName.indexOf("Explorer") > -1)
{
document.getElementById('totalSecond').innerText = second--;
} else
{
document.getElementById('totalSecond').textContent = second--;
}
}
}
</script>
posted @
2006-11-22 17:20 Jcat 阅读(16867) |
评论 (2) |
编辑 收藏
我们都知道SQL查询过程中,单引号“'”是特殊字符,所以在查询的时候要转换成双单引号“''”。
但这只是特殊字符的一个,在实际项目中,发现对于like操作还有以下特殊字符:下划线“_”,百分号“%”,方括号“[]”以及尖号“^”。
其用途如下:
下划线:用于代替一个任意字符(相当于正则表达式中的 ? )
百分号:用于代替任意数目的任意字符(相当于正则表达式中的 * )
方括号:用于转义(事实上只有左方括号用于转义,右方括号使用最近优先原则匹配最近的左方括号)
尖号:用于排除一些字符进行匹配(这个与正则表达式中的一样)
以下是一些匹配的举例,需要说明的是,只有like操作才有这些特殊字符,=操作是没有的。
a_b... a[_]b%
a%b... a[%]b%
a[b... a[[]b%
a]b... a]b%
a[]b... a[[]]b%
a[^]b... a[[][^]]b%
a[^^]b... a[[][^][^]]b%
在实际进行处理的时候,对于=操作,我们一般只需要如此替换:
' -> ''
对于like操作,需要进行以下替换(注意顺序也很重要)
[ -> [[] (这个必须是第一个替换的!!)
% -> [%] (这里%是指希望匹配的字符本身包括的%而不是专门用于匹配的通配符)
_ -> [_]
^ -> [^]
posted @
2006-11-16 18:31 Jcat 阅读(2620) |
评论 (0) |
编辑 收藏
--查询short_name有重的记录
select short_name, count(*) from sys_catalog
group by short_name
having count(*)>1
--给short_name加上unique约束
alter table sys_catalog add unique (short_name)
--给column01加上check in约束
alter table son add constraint ck1 check (column01 in (1,2,3));
--查询与当前系统时间最近的那个时间
select some_dt, sysdate-some_dt as gap from test_date
where sysdate-some_dt = (select min(abs(sysdate-some_dt)) from test_date)
--加字段
alter table some_table add some_column varchar2(20)
--找出所有包含_(下划线)的字段;网上说用[_],但没成功
select * from test_date where email like '%/_%' escape '/'
--启动用户
alter user scott account unlock;
--更改密码
alter user scott indentified by tiger;
posted @
2006-11-15 13:50 Jcat 阅读(226) |
评论 (0) |
编辑 收藏
In my opinion, SYSDBA and SYSOPER are system privileges.
You can find them by
select * from system_privilege_map where name like 'SYS%'As I know
1. schema: SYS, SYSTEM, SYSMAN
2. privilege: SYSDBA, SYSOPER
3. role: DBA
Note: The DBA role does not include the SYSDBA or SYSOPER system privileges.
-------------
sysdba、sysoper是一种很特殊的权限,可以启动与关闭、创建与删除数据库等,不包含在dba权限之内的。
两个权限是超越数据库的权限(新建,启动,关闭数据库),在数据库之上,所以dba_roles中没有(??)。
只要用internal用户将此权限授给其它的用户就可以用此用户加 as sysdba 登录,可以关闭和启动数据库了。并可以进行oracle DBA所不能做的操作。
授权:
SQL> grant sysdba,sysoper to jcat
收回权限:
SQL> revoke sysdba from jcat
查看这两个权限的拥有情况(需一定的权限,sys就可以看):
SQL> select * from v$pwfile_users
-------------
sysdba 拥有最高的系统权限 (sysdba的权限包含所有sysoper的权限)
sysoper主要用来启动、关闭数据库
相比之下,SYSDBA比SYSOPER多了两个权限:
1)change character set,改变字符集设置;
2)CREATE DATABASE,创建数据库。
sysoper登陆后用户是 public
sysdba 登陆后是 sys
可以通过以下方式进行验证:
SQL> conn test/test as sysoper;
SQL> show user
USER 为"PUBLIC"
SQL> conn test/test as sysdba
SQL> show user
USER 为"SYS"
posted @
2006-10-25 15:12 Jcat 阅读(561) |
评论 (0) |
编辑 收藏
After a new database built, confirm following tools is working.
1. sqlplus
./sqlplus
connect system/******
2. isqlplus
http://localhost:5560/isqlplus
username=system
password=******
3. TNS
./lsnrctl
start
4. em
http://localhost:5500/em
username=system
password=******
posted @
2006-10-23 16:01 Jcat 阅读(238) |
评论 (0) |
编辑 收藏
Linux下常用压缩格式的压缩与解压方法
|
大致总结了一下linux下各种格式的压缩包的压缩、解压方法。但是部分方法我没有用到,也就不全,希望大家帮我补充,我将随时修改完善,谢谢! 作者:Linux爱好者 来自:www.LinuxByte.net 最后更新时间:2003-12-1
.tar 解压:tar xvf FileName.tar 压缩:tar cvf FileName.tar DirName (注:tar是打包,不是压缩!) --------------------------------------------- .gz 解压1:gunzip FileName.gz 解压2:gzip -d FileName.gz 压缩:gzip FileName .tar.gz 解压:tar zxvf FileName.tar.gz 压缩:tar zcvf FileName.tar.gz DirName --------------------------------------------- .bz2 解压1:bzip2 -d FileName.bz2 解压2:bunzip2 FileName.bz2 压缩: bzip2 -z FileName .tar.bz2 解压:tar jxvf FileName.tar.bz2 压缩:tar jcvf FileName.tar.bz2 DirName --------------------------------------------- .bz 解压1:bzip2 -d FileName.bz 解压2:bunzip2 FileName.bz 压缩:未知 .tar.bz 解压:tar jxvf FileName.tar.bz 压缩:未知 --------------------------------------------- .Z 解压:uncompress FileName.Z 压缩:compress FileName .tar.Z 解压:tar Zxvf FileName.tar.Z 压缩:tar Zcvf FileName.tar.Z DirName --------------------------------------------- .tgz 解压:tar zxvf FileName.tgz 压缩:未知 .tar.tgz 解压:tar zxvf FileName.tar.tgz 压缩:tar zcvf FileName.tar.tgz FileName ---------------------------------------------
.a
解压:#tar xv file.a
---------------------------------------------
.cpio.gz/.cgz
解压:gzip -dc file.cgz | cpio -div
---------------------------------------------
.cpio/cpio
解压:cpio -div file.cpio 或cpio -divc file.cpio
---------------------------------------------
.rpm
安装: rpm -i file.rpm 解压:rpm2cpio file.rpm | cpio -div
---------------------------------------------
.deb
安装: dpkg -i file.deb
解压:dpkg-deb --fsys-tarfile file.deb | tar xvf - ar p file.deb data.tar.gz | tar xvzf - ---------------------------------------------
.zip
解压:unzip FileName.zip 压缩:zip FileName.zip DirName --------------------------------------------- .rar 解压:rar a FileName.rar 压缩:rar e FileName.rar
rar请到:http://www.rarsoft.com/download.htm 下载! 解压后请将rar_static拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以): [root@www2 tmp]# cp rar_static /usr/bin/rar --------------------------------------------- .lha 解压:lha -e FileName.lha 压缩:lha -a FileName.lha FileName
lha请到:http://www.infor.kanazawa-it.ac.jp/~ishii/lhaunix/下载! 解压后请将lha拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以): [root@www2 tmp]# cp lha /usr/bin/ --------------------------------------------- .tar .tgz .tar.gz .tar.Z .tar.bz .tar.bz2 .zip .cpio .rpm .deb .slp .arj .rar .ace .lha .lzh .lzx .lzs .arc .sda .sfx .lnx .zoo .cab .kar .cpt .pit .sit .sea 解压:sEx x FileName.* 压缩:sEx a FileName.* FileName
sEx只是调用相关程序,本身并无压缩、解压功能,请注意! sEx请到:http://sourceforge.net/projects/sex下载! 解压后请将sEx拷贝到/usr/bin目录(其他由$PATH环境变量指定的目录也可以): [root@www2 tmp]# cp sEx /usr/bin/
参考文献:Linux 文件压缩工具指南 (其实看帮助是最好的方法,一般各个命令都可以用“--help”参数得到常用使用方法!)
|
posted @
2006-10-19 00:33 Jcat 阅读(474) |
评论 (0) |
编辑 收藏
select * from user_objects
查看当前数据库的所有对象(表、视图、过程……)
describe AA显示表AA的信息(字段名、类型……)
select * from AA where rownum=1返回结果集中的第一行
show parameter para_name 不等同于 select para_name from v$instance查看初始化参数 (省略para_name可以查看所有的初始化参数)
alter system set para_name = some_value scope = both修改初始化参数
select * from v$database
查看物理数据库的信息
alter database xxxx对数据库进行结构性修改
sql>archive log list查看redo log的信息
posted @
2006-10-10 16:41 Jcat 阅读(219) |
评论 (0) |
编辑 收藏