Oracle merge into 的用法详解实例
作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表;
语法:
MERGE INTO [your table-name] [rename your table here]
USING ( [write your query here] )[rename your query-sql and using just like a table]
ON ([conditional expression here] AND [...]...)
WHEN MATHED THEN [here you can execute some update sql or something else ]
WHEN NOT MATHED THEN [execute something else here ! ]
-------实例-------
merge into a
using (select id,name from b ) c
on(a.id=c.id )
when matched then update set a.name=c.name
when not matched then insert (a.id,a.name) values (c.id,c.name);
作用:利用表 b 跟新表a ,条件是a.id=b.id,如果a表中没有该条件的数据就插入。
如果你的数据量很大,此sql效率非常高。 ......
Perl从oracle导出百万级数据到excel excel 2007 可以存放1048576行、16384列的数据;excel 2003大概是65535行 我从oracle中导出30万行60列的数据到excel中花了约8分钟。
如果你还没有安装perl,按下面步骤
步骤:
1、下载
并安装perl v5.8.8,可以使用perl -v查看是否安装成功,
2、输入PPM命令打开perl的包管理器。找到并更新DBI,
2、下载
DBD-Oracle
-1.17.zip解压到c:\perl 在命令行进入该目录执行: ppm install dbd-oracle.ppd 安装DBD-oracle;
3、安装 Excel 模块,如果你能联网,直接使用如下命令即可:
ppm install OLE::Storage_Lite
ppm install Spreadsheet::ParseExcel
ppm install Spreadsheet::WriteExcel4、将如下代码保存到d:\test.pl,更改里面的oracle的用户名和ip地址,以及端口号,以及sql语句
5、在命令行进入d盘下执行:perl test.pl
&n ......
数据库名、实例名、数据库域名、全局数据库名、服务名
这是几个令很多初学者容易混淆的概念。相信很多初学者都与我一样被标题上这些个概念搞得一头雾水。我们现在就来把它们弄个明白。
一、数据库名
什么是数据库名?
数据库名就是一个数据库的标识,就像人的身份证号一样。他用参数DB_NAME表示,如果一台机器上装了多全数据库,那么每一个数据库都有一个数据库名。在数据库安装或创建完成之后,参数DB_NAME被写入参数文件之中。格式如下:
DB_NAME=myorcl
...
在 创建数据库时就应考虑好数据库名,并且在创建完数据库之后,数据库名不宜修改,即使要修改也会很麻烦。因为,数据库名还被写入控制文件中,控制文件是以 二进制型式存储的,用户无法修改控制文件的内容。假设用户修改了参数文件中的数据库名,即修改DB_NAME的值。但是在Oracle启动时,由于参数文 件中的DB_NAME与控制文件中的数据库名不一致,导致数据库启动失败,将返回ORA-01103错误。
数据库名的作用
数据库名是在安装数据库、创建新的数据库、创建数据库控制文件、修改数据结构、备份与恢复数据库时都需要使用到的。
有很多Oracle安装文件目录是与数据库名相关的,如:
winnt: d:\oracle\product ......
1、这里比较重要的就是安装好了DBD就可以了
perl MakeFile.PL
make
make test
make install(可能需要root用户来操作)
2、链接代码就简单了。
#!/usr/local/bin/perl
use DBI;
$dbname="db09";
$dbuser="dsg";
$dbpasswd="dsg";
$dbh = DBI->connect("dbi:Oracle:$dbname",$dbuser,$dbpasswd) or die("DB connect error!n");
print "connect to db09 is ok!\n";
$sql = "select rowid,a.* from test1 a where rownum<11";
$sth = $dbh->prepare($sql);
print "dbh->prepare sql is ok!\n";
$sth->execute() or die("error!");
print "execute sql is ok!\n";
open (OUTPUT,">output.txt")
or die "Could't write text into output.txt!\n";
while (@recs=$sth->fetchrow_array) {
print OUTPUT $recs[0]."\t".$recs[1]."\t".$recs[2]."\n";
}
close(OUTPUT);
$sth-& ......
注: oracle对linux版本有要求,还有所需的package包不是很好找,如有需要可以发email给我:tianlesoftware@vip.qq.com,我可以传给你.....
Steep1: 下载软件包
10201_database_linux32
openmotif21-2.1.30-14.i386.rpm
Steep3: 设置内核参数(在/etc/sysctl.conf文件中加入下列行)
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144
--然后运行下面命令,使上面的设置生效
#/sbin/sysctl -p
Steep4: 将下面几行添加到 /etc/security/limits.conf 文件中:
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
Steep5: 将下面一行添加到/etc/pam.d/login文件中:
session required /lib/security/pam_limits.so
Steep6: 禁用SELINUX,编辑/etc/selin ......
注: oracle对linux版本有要求,还有所需的package包不是很好找,如有需要可以发email给我:tianlesoftware@vip.qq.com,我可以传给你.....
Steep1: 下载软件包
10201_database_linux32
openmotif21-2.1.30-14.i386.rpm
Steep3: 设置内核参数(在/etc/sysctl.conf文件中加入下列行)
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144
--然后运行下面命令,使上面的设置生效
#/sbin/sysctl -p
Steep4: 将下面几行添加到 /etc/security/limits.conf 文件中:
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
Steep5: 将下面一行添加到/etc/pam.d/login文件中:
session required /lib/security/pam_limits.so
Steep6: 禁用SELINUX,编辑/etc/selin ......
Oracle 10g支持在命令行下用静默模式(Silent)安装,给那些没有安装图形界面的Linux系统提供了极大的便利。
下面以Fedora Core 6为例,介绍在命令行下安装OracleOracle 10g的方法。
1 安装前的准备
准备工作要用登录为root用户来进行。
1.1 选择安装环境的语言
Oracle安装时可以通过环境变量LANG指定安装语言,如果Linux命令行不能显示中文,就要将语言环境设置为英语。
例如:export LANG=en_US.UTF-8
1.2 修改gennttab
Oracle 10g在一些Linux系统下安装可能会被中断,在安装日志文件
$ORACLE_HOME/install/make.log
里可以看见以下错误信息
/bin/sed: -e expression #1, char 7: unterminated `s' command
要解决这个问题就必须编辑文件 gennttab。
先解压Oracle安装目录下的 stage/Components/oracle.network.rsf/10.2.0.1.0/1/DataFiles/filegroup6.jar,可以用以下方法之一进行解压
用jar解压:jar -xf filegroup6.jar bin/gennttab
用unzip解压:unzip filegroup6.jar bin/gennttab
再用文本编辑器(例如vi)打开解压出来的 gennttab,将以下内容
LIB=`$ECHO ${TtoLIB} | $SED 's/ /\\
/g' | $GREP "^${T}:" | $AWK -F: '{print $2}'`
INI=`$ECHO $ ......
Oracle 10g支持在命令行下用静默模式(Silent)安装,给那些没有安装图形界面的Linux系统提供了极大的便利。
下面以Fedora Core 6为例,介绍在命令行下安装OracleOracle 10g的方法。
1 安装前的准备
准备工作要用登录为root用户来进行。
1.1 选择安装环境的语言
Oracle安装时可以通过环境变量LANG指定安装语言,如果Linux命令行不能显示中文,就要将语言环境设置为英语。
例如:export LANG=en_US.UTF-8
1.2 修改gennttab
Oracle 10g在一些Linux系统下安装可能会被中断,在安装日志文件
$ORACLE_HOME/install/make.log
里可以看见以下错误信息
/bin/sed: -e expression #1, char 7: unterminated `s' command
要解决这个问题就必须编辑文件 gennttab。
先解压Oracle安装目录下的 stage/Components/oracle.network.rsf/10.2.0.1.0/1/DataFiles/filegroup6.jar,可以用以下方法之一进行解压
用jar解压:jar -xf filegroup6.jar bin/gennttab
用unzip解压:unzip filegroup6.jar bin/gennttab
再用文本编辑器(例如vi)打开解压出来的 gennttab,将以下内容
LIB=`$ECHO ${TtoLIB} | $SED 's/ /\\
/g' | $GREP "^${T}:" | $AWK -F: '{print $2}'`
INI=`$ECHO $ ......