这篇文章记录一些Oracle的小技巧,以供参考。

一、函数篇

1. TRUNC, ROUND

trunc一个普遍的用法是对数值的截取,如

SQL> SELECT TRUNC(3.1415926,3) FROM dual;

TRUNC(3.1415926,3)
------------------
3.141

TRUNC函数其实还支持对日期的截断,如

SQL> SELECT TRUNC(SYSDATE,'mm') FROM dual;

TRUNC(SYS
---------
01-MAY-13

TRUNC的第二个参数支持多个精度,可以截断到时分,年季月等等。它的语法如下:



其中的fmt的日期格式部分可以参见这里

同理地,ROUND函数也有类似的用法。

2. DECODE

由于在Oracle里 "NULL =  NULL" 不为真也不为假,所以做表的关联时,如果想让NULL值和NULL也关联上就需要这样写:

WHERE (column = :bind_variable OR (column IS NULL AND :bind_variable IS NULL))

其实有一种更简洁的写法,就是用上DECODE函数:

DECODE(column,:bind_variable,1) = 1

(这里方法取自Thomas Kyte《Oracle Database 9i/10g/11g 编程艺术》6.2.2)

我最早用的数据库是Oracle,用了快一年,主要做ETL,平时做点维护的工作,还做过优化,对于Oracle真是爱不释手,再用着PL/SQL Developer真是如虎添翼(关于PL/SQL  Developer的配置可以参看这篇文章,还可以从官网上下一些插件)。

现在换工作用上了MS SQL Server,哎,还有它自带的开发工具SQL Server Management Studio(SSMS),真是只能一声长叹啊!

SQL Server 2008可能还好点,2005版的不支持代码提示,不支持关键词自动大写,代码的自动化和左边栏的导航也远不及PL/SQL  Developer,后者还有一些专为开发而设置的功能也极方便。

好吧,吐槽结束。

首先如果能在一方系统上搭建好 FTP,那么另一方就能直接通过 FTP 得到文件。

还有一种办法,就是利用 SSH 通道来传输文件。这样利用加密通道来传输文件显然会更安全,而且感觉也更方便一些。

前提条件:

  • Linux 下安装 openssh-server
  • Windows 下安装了 Putty(直接下载 Putty 官网上的完整压缩包解压到本地即可)。

在 Windows 环境中实现互传文件

(假设 Putty 解压后放在  D:putty 文件夹中)

实现与 Linux 系统互传文件可以用 PSCP.EXE  或者 PSFTP.EXE,它们都是用 SSH  通道来传输文件,但是优先考虑用 PSFTP.EXE,因为  PSFTP  用 SSH-2 且支持命令行交互,下面就介绍下怎么利用 PSFTP.EXE 来传输文件。

在命令行下 cd 到 Putty 所在文件夹(此处是 D:putty),输入 psftp.exe 就进入了交互界面

D:\putty> PSFTP.EXE
psftp: no hostname specified; use "open host.name" to connect
psftp> open 192.168.0.100
login as: tony
tony@192.168.0.100's password:
Remote working directory is /home/tony
psftp> cd Public
Remote directory is now /home/tony/Public
psftp> lcd ..share
New local directory is D:share
psftp> put  lotus.jpg
local:lotus.jpg => remote:/home/tony/Public/lotus.jpg
psftp>

如上,cd Public 是切换远程 Linux 服务器上的当前目录,lcd ..share 是切换本地 Windows 的当前目录,put 是将本地文件传到远端服务器上,get 是从远端服务器上获取文件,要传输文件夹请加上 '-r' 参数

需要更多功能建议直接参考官方文档,比如需传输的文件较多时,可以将命令直接写入文件(如 batchfile 中),然后用命令 "psftp fred@hostname -b batchfile" 直接调用,方便快捷。