oracle开发工具

1、oracle SQL Developer
oracle官方出的开发工具,免费,可升级。
比较推荐,不是特别专注于数据库开发的人员使用。
需要安装:
1)JDK
2)SQL Developer软件

oracle SQL Developer 4.0.3 网盘下载地址:http://pan.baidu.com/s/1kT1LLpP

2、PL/SQL Developer
一家荷兰公司出的Oracle数据库开发工具,收费软件。
需要安装:
1)即时客户端instantclient-basic
2)plsqldev软件
3)注册机(或破解补丁)
4)汉化程序

DBA们用的很多,大多数是破解版。

3、TOAD
是一家专门做Oracle开发工具的公司做的,收费软件。
需要安装:
1)Toad软件
2)注册机(或注册码)

适合专业的数据库开发人员使用。

oracle生成测试数据

网上找了一个sql可以大批量生成测试数据:

create table myTestTable as 
  select 
    rownum as id, 
    to_char(sysdate + rownum/24/3600, 'yyyy-mm-dd hh24:mi:ss') as inc_datetime, 
    trunc(dbms_random.value(0, 100)) as random_id, 
    dbms_random.string('x', 20) random_string 
  from dual 
    connect by level <= 1200000; 


执行时报错:
ORA-01536: 超出表空间 'USERS' 的空间限额

增加表空间:

alter user liu quota unlimited on users;

再执行时又报错:
ORA-30009: CONNECT BY 操作内存不足
or
ORA-30009: Not enough memory for CONNECT BY operation
继续阅读oracle生成测试数据

oracle rownum使用

rownum是oracle中神奇的列,它是一个伪列,是在sql查询出结果之后加在表上的。

oracle中rownum只能:
1)大于0,
2)等于1,
3)小于任何值。

1、大于0
比较:

select * from emp where rownum > 0;
select * from emp where rownum > 1;

rownum大于0,结果记录都返回。
rownum大于1,结果为空。

在执行过程中,rownum是从1开始的,判断rownum > 1时,第一条不满足会去掉,第二条又变成了1,所以最后结果会空。

2、等于1
比较:

select * from emp where rownum = 1;
select * from emp where rownum = 2;

rownum等于1,结果记录返回。
rownum等于2,结果为空。
继续阅读oracle rownum使用

Linux time函数

Linux下time函数都在time.h头文件中。

1、头文件
和时间有关的头文件有以下几个:

time.h
sys/time.h
sys/times.h
sys/timeb.h
sys/timex.h

time.h是C标准库的头文件,其余sys开头的都是Linux系统自己的头文件。
/usr/include/time.h定义了常用的time函数。
到/usr/include/sys目录下查看这几个文件:
sys/time.h定义了timezone结构体和Linux系统的时间函数。
sys/times.h定义了进程使用CPU时间的结构体tms。
sys/timeb.h定义了ftime函数的返回值的结构体timeb。
sys/timex.h定义了关于时钟调整算法的结构体timex。

2、常用函数和结构体
time函数原型(time.h中):

time_t time(time_t *calptr);

参数:
time_t类型变量的指针。
返回值:
time_t类型相当于一个long,time用于取Epoch记年以来到现在经过的秒数(系统当前时间),Epoch记年从1970年1月1日开始。把取到的时间存在指针指向的变量中。
继续阅读Linux time函数

oracle minus使用

minus返回在第一个查询结果中与第二个查询结果不相同的那部分记录,minus的作用简单来说是对第一个表去同留异。

表A、表B,表A和表B有交集,我们要取表A中去掉交集后的所有记录。也就是下图中单独画红线的部分。

例如:
表t111内值为1、2、3,表t222内值为3、4。以t111为基表使用minus之后返回结果是:1、2。

代码:

drop table t111;
drop table t222;

create table t111
(
id varchar2(2)
);

create table t222
(
id varchar2(2)
);

insert into t111 values ('1');
insert into t111 values ('2');
insert into t111 values ('3');

insert into t222 values ('3');
insert into t222 values ('4');

(select * from t111)
MINUS
(select * from t222);

执行结果:

ID
----------
1
2

参考资料:
http://bbs.csdn.net/topics/270003462
http://www.cnblogs.com/chshnan/archive/2011/11/14/2248731.html
http://hi.baidu.com/wangzhiqing99/item/8281bae7c251bf2c6cabb82b

oracle in使用

oracle in可以用来筛选某个字段等于多个值的情况。

1、in对后面写数字的有1000个的数量限制,如果超过1000个要用:in(1000个数字) or in (剩余数字)
2、in后面跟子查询没有数量限制:in(select XXXXXXXXX)

简单的例子:
1)

select * from emp where deptno in ('20', '30');

–in后面是单引号引起来的值,有数量限制。

2)

select * from emp t0 where t0.deptno in (select t1.deptno from dept t1);

–in后面是一个子查询,没有数量限制。

3)

select * from emp where empno in
(
select rownum as id from dual connect by level <= 7500 );

--查询empno在7500范围内的记录。

oracle with as子句

oracle中with as子句相当于把一个子查询的语句块定义一个别名(临时表),在之后紧跟的select查询中可以重复使用。

格式:
WITH <alias_name> AS
(
subquery_sql_statement
)
SELECT <column_name_list> FROM <alias_name>;

要注意的是在with as子句后面只能跟一个select查询语句,with生成的临时表在select结束后就会被释放掉。
使用with的好处是使代码的结构更清晰。在多次对一个子查询使用时,效率更高。

例子:
–查询出部门的总工资

WITH DEPT_COSTS AS
(SELECT D.DNAME, SUM(E.SAL) DEPT_TOTAL
FROM DEPT D, EMP E
WHERE E.DEPTNO = D.DEPTNO
GROUP BY D.DNAME)
select * from DEPT_COSTS;

参考资料:
http://blog.itpub.net/11759632/viewspace-1060884/

Linux信号掩码和信号处理函数

1、信号掩码——被阻塞的信号集
每个进程都有一个用来描述哪些信号传送来将被阻塞的信号集,如果某种信号在某个进程的阻塞信号集中,则传送到该进程的此种信号将会被阻塞。当前被进程阻塞的信号集也叫信号掩码,类型为sigset_t。每个进程都有自己的信号掩码,且创建子进程时,子进程会继承父进程的信号掩码。

2、信号阻塞和忽略的区别
阻塞的概念与忽略信号是不同的:操作系统在信号被进程解除阻塞之前不会将信号传递出去,被阻塞的信号也不会影响进程的行为,信号只是暂时被阻止传递;当进程忽略一个信号时,信号会被传递出去,但进程将信号丢弃。

每个进程都有一个信号掩码,信号掩码是一个“位图”,如果位图中某位标识1,表示该位对应的信号被暂时屏蔽。如果标识为0,表示进程可以接收这个信号。

System V signal API信号处理函数除了sigset外,还有以下几个。

sighold()函数
把指定的信号增加到信号掩码中去(将位图中对应的位标识为1),这样就暂时屏蔽了该信号。
返回值:成功返回0,失败返回-1。

sigrelse()函数
从信号掩码中移除指定的信号,这样进程就可以接收该信号了。
返回值:成功返回0,失败返回-1。

sigignore()函数
将信号配置为SIG_IGN,即忽略该信号。
返回值:成功返回0,失败返回-1。
sigignore(SIGALRM)相当于sigset(SIGALRM, SIG_IGN)
继续阅读Linux信号掩码和信号处理函数