我用的是Centos5.4 DVD光盘安装的linux操作系统,安装linux的时候选上开发工具,Xmanager,与数据库相关的包。
操作系统安装完成之后需要进行一系列的配置才能安装oracle10g,下面把主要步骤记录下来。
1.安装完操作系统之后还是有些包没有安装,然而安装oracle10g的时候需要用到,没有安装的包有:
libXp-1.0.0-8.i386.rpm
openmotif-2.3.0-0.3.el5.i386.rpm
compat-db-4.2.52-5.1.i386.rpm
2.添加组和用户
groupadd dba --创建dba组
groupadd oinstall --创建oinstall组
useradd -g oinstall -G dba -m oracle
-g表示oracle用户属于oinstall组,也就是前面创建的oinstall组
-G表示oracle的附加组为dba,也就是前面创建的dba组
-m表示自动创建oracle用户的登入目录
passwd oracle --给oracle创建密码 需要连续输入两次
3.创建安装目录和授予权限
mkdir -p /u01/app/oracle &nbs ......
我用的是Centos5.4 DVD光盘安装的linux操作系统,安装linux的时候选上开发工具,Xmanager,与数据库相关的包。
操作系统安装完成之后需要进行一系列的配置才能安装oracle10g,下面把主要步骤记录下来。
1.安装完操作系统之后还是有些包没有安装,然而安装oracle10g的时候需要用到,没有安装的包有:
libXp-1.0.0-8.i386.rpm
openmotif-2.3.0-0.3.el5.i386.rpm
compat-db-4.2.52-5.1.i386.rpm
2.添加组和用户
groupadd dba --创建dba组
groupadd oinstall --创建oinstall组
useradd -g oinstall -G dba -m oracle
-g表示oracle用户属于oinstall组,也就是前面创建的oinstall组
-G表示oracle的附加组为dba,也就是前面创建的dba组
-m表示自动创建oracle用户的登入目录
passwd oracle --给oracle创建密码 需要连续输入两次
3.创建安装目录和授予权限
mkdir -p /u01/app/oracle &nbs ......
1。select * from a where a.rowid=(select min(b.rowid) from b where a.id=b.id);
create test1(
nflowid number primary key,
ndocid number,
drecvdate date);
insert into test1 values (1, 12301, sysdate) ;
insert into test1 values (2, 12301, sysdate);
select * from test1 order by drecvdate:
result:
nflowid ndocid drecvdate
1 12301 2010-2-1
2 12301 2010-2-2
要求: 根据NDOCID为查询条件, DRECVDATE排序,显示重复数据中最小的那条记录
String sql1 = "select * from test1 where ndocid=12301 order by decvdate";
String sql2 = "select * from (" + sql1 + ") a where a.rowid=" +
"(select min(b.rowid) from (" + sql1 + ") b " +
"where a.ndocid=b.ndocid)";
要点: 1. nflowid 是PK, 如果不是PK, 则有可能会报告ORA-1445 错误
2. 此语句,不管NFLOWID=1的DRECVDAGTE比NFLOWID=2的DRECVDATE早还是晚,都返回:
1, 12301 2010-2-1. 原因我觉得:这个ROWID貌似就是NFLOW ......
1。select * from a where a.rowid=(select min(b.rowid) from b where a.id=b.id);
create test1(
nflowid number primary key,
ndocid number,
drecvdate date);
insert into test1 values (1, 12301, sysdate) ;
insert into test1 values (2, 12301, sysdate);
select * from test1 order by drecvdate:
result:
nflowid ndocid drecvdate
1 12301 2010-2-1
2 12301 2010-2-2
要求: 根据NDOCID为查询条件, DRECVDATE排序,显示重复数据中最小的那条记录
String sql1 = "select * from test1 where ndocid=12301 order by decvdate";
String sql2 = "select * from (" + sql1 + ") a where a.rowid=" +
"(select min(b.rowid) from (" + sql1 + ") b " +
"where a.ndocid=b.ndocid)";
要点: 1. nflowid 是PK, 如果不是PK, 则有可能会报告ORA-1445 错误
2. 此语句,不管NFLOWID=1的DRECVDAGTE比NFLOWID=2的DRECVDATE早还是晚,都返回:
1, 12301 2010-2-1. 原因我觉得:这个ROWID貌似就是NFLOW ......
对象持久化,也就是可以把这个对象永远的保存起来,这里的保存不仅是对象本身,还包括他的属性和所依赖的其他类。通常,对象可以持久化到文件或者是数据库中。我这里只介绍如何将对象存储到数据库中。恰巧Oracle数据库为我们提供了这样的方便。
在Oracle中,有一种blog的字段类型,它是用来存储大量的二进制数据的。我们就利用这个字段去存储对象信息。
首先建立一个测试表:
create table TESTBLOB
(
NAME VARCHAR2(50) not null,
CONTENT BLOB not null,
ID NUMBER(8) not null
)alter table TESTBLOB
add constraint IDFORTEST primary key (ID);
只用三个字段,其中id是属性,content是我们要存储对象的字段。
先来看看我们要存入的对象:
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class TestObject implements Serializable {
private static final long serialVersionUID = 4558876142427402513L;
/**
* @param args
*/
& ......
对象持久化,也就是可以把这个对象永远的保存起来,这里的保存不仅是对象本身,还包括他的属性和所依赖的其他类。通常,对象可以持久化到文件或者是数据库中。我这里只介绍如何将对象存储到数据库中。恰巧Oracle数据库为我们提供了这样的方便。
在Oracle中,有一种blog的字段类型,它是用来存储大量的二进制数据的。我们就利用这个字段去存储对象信息。
首先建立一个测试表:
create table TESTBLOB
(
NAME VARCHAR2(50) not null,
CONTENT BLOB not null,
ID NUMBER(8) not null
)alter table TESTBLOB
add constraint IDFORTEST primary key (ID);
只用三个字段,其中id是属性,content是我们要存储对象的字段。
先来看看我们要存入的对象:
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public class TestObject implements Serializable {
private static final long serialVersionUID = 4558876142427402513L;
/**
* @param args
*/
& ......
项目从mysql迁移到ORACLE中遇到移植问题,mysql中支持limit 而ORACLE say no .
解决方法 利用ORACLE的伪列 rownum来控制。。
Mysql : select * from table limit 10
equl
ORACLE: select * from table where rownum <= 10
ORACLE 伪列介绍:
随数据字典一起自动创建的一个表,属于sys模式,任何用户都可以访问, 只有一列dummy(varchar2(1)),返回值也只有一行,
因此,在进行select 计算常量表达式或者伪列时常常用到.
oracle中的常用到的伪列:
序列
currval:序列當前值
nextval:序列的新值
level:层次查询中的层数
rowid:特定的行表識符
rownum:行序號
用法:
序列:
create sequence sequence1;
currval:
select sequence1.currval from dual;
nextval:
select sequence1.nextval from dual; ......
项目从mysql迁移到ORACLE中遇到移植问题,mysql中支持limit 而ORACLE say no .
解决方法 利用ORACLE的伪列 rownum来控制。。
Mysql : select * from table limit 10
equl
ORACLE: select * from table where rownum <= 10
ORACLE 伪列介绍:
随数据字典一起自动创建的一个表,属于sys模式,任何用户都可以访问, 只有一列dummy(varchar2(1)),返回值也只有一行,
因此,在进行select 计算常量表达式或者伪列时常常用到.
oracle中的常用到的伪列:
序列
currval:序列當前值
nextval:序列的新值
level:层次查询中的层数
rowid:特定的行表識符
rownum:行序號
用法:
序列:
create sequence sequence1;
currval:
select sequence1.currval from dual;
nextval:
select sequence1.nextval from dual; ......
--建立测试数据
create table a(id number);
create table b(id number);
insert into a values(1);
insert into a values(2);
insert into a values(3);
insert into b values(1);
insert into b values(2);
insert into b values(4);
commit;
--左:
--主流数据库通用的方法
select * from a left join b on a.id=b.id;
--Oracle特有的方法
select * from a, b where a.id=b.id(+);
ID ID
---------- ----------
1 1
2 2
3
--右:
--主流数据库通用的方法
select * from a right join b on a.id=b.id;
--Oracle特有的方法
select * from a, b where a.id(+)=b.id;
ID ID
---------- ----------
1 1
2 2
4
--内
--主流数据库通用的方法
select * from a join b on a.id=b.id;
--where关联
select * from a, b where a.id=b.id;
ID ID
---------- ----------
1 1
2 2
--全外
--主流数据库通用的方法
select * from a full join b on a.id=b.id;
--Oracle特有的方法
select *
from a, b
where a.id = b.id(+)
union
select *
from a, b
where a.id(+) = b.id;
ID ID
-- ......
EXP/IMP注意:从全库逻辑备份按用户导入时,Oracle没有导入JOB,不知道这个是Oracle的bug,还是故意这样实现的。这个问题在导入的用户名和导出的用户名不同时出现,如果导入的用户名和导出的用户名一致,则不会出现这个问题。怀疑是Oracle调用DBMS_IJOB包时出现的问题。
总之,EXP/IMP的时候需要考虑JOB,并在操作结束后检查JOB信息是否已经正确的导入。
本文给大家介绍一下ORACLE job的使用方法:
这个job 执行的功能: 向某张表中定时插入一条记录(比如一分钟插入一条)
step 1: 首先创建一张表 a,
create table a(a date);
step 2: 创建一个proc test ,这个 test 就是取出系统的当前时间值,然后插入到 a 表中
SQL> create or replace procedure test as
begin
insert into a values(sysdate);
end;
/
step 3: 创建一个job,这个job设置为每分钟运行一次,也就是每分钟调用一下上面的 test,这个 proc
SQL> variable job1 number;
SQL>
SQL> begin
dbms_job.submit(:job1,'test;',sysdate,'sysdate+1/1440'); --每天1440分钟,即一分钟运行test过程一次
end;
/
step 4:去运行上面创建好的 job
SQL> begin
dbms_job.ru ......