Jcat
宠辱不惊,闲看庭前花开花落~~
posts - 173,comments - 67,trackbacks - 0
--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)编辑 收藏
仅列出标题
共17页: First 上一页 9 10 11 12 13 14 15 16 17 下一页