Oracle11g新特性:使用PIVOT/UNPIVOT进行行列转换

Oracle11g新特性:使用PIVOT/UNPIVOT进行行列转换

MS SQL Server 2005引入的pivot/unpivot关键字,对于行列转换确实非常的方便。所以Oracle11g也引入了这两个关键字,语法和SQL Server 2005的基本上差不错。

SQL> select * from sales;
 
PRODCUT       QUARTER     AMOUNT
--------
-- ---------- ----------
a                   1        100
a                   2        110
a                   3        130
a                   4        140
b                   1        210
b                   2        220
b                   3        230
b                   4        240

使用pivot转换显示:

SQL> select * from sales
 
2   pivot (sum(amount)
 
3  for quarter in
 
4  (1 as Q1,2 as Q2,3 as Q3,4 as Q4));
 
PRODCUT            Q1         Q2         Q3         Q4
--------
-- ---------- ---------- ---------- ----------
a                 100        110        130        140
b                 210        220        230        240

[继续阅读全文]

Oracle11g SQLPLUS支持直接显示Blob数据

在Oracle10g及以前版本的sqlplus中,不能直接显示blob或者bfile类型的数据:

SQL> create table t(b blob);
 
Table created.
 
SQL> insert into t values('1');
 
1 row created.
 
SQL> select * from t;
SP2-0678: Column or attribute type can not be displayed by SQL*Plus

Oracle11g中,sqlplus的这个限制已经取消,可以在sqlplus中直接显示blob和bfile类型的数据:

SQL> create table t(b blob);
 
Table created.
 
SQL> insert into t values('1');
 
1 row created.
 
SQL> select * from t;
 
B
---------------
--
1

遭遇Oracle11g第一个bug

昨晚安装软件,dbca建库,一切顺利。弄完后就睡觉了,谁知道今天一开机,输入sqlplus,晕,报错了,sqlplus无法打开:

sqlplus: error while loading shared libraries:/oracle/11g/lib/libnnz11.so:

cannot restore segment prot after reloc: Permission denied

Google了一下,oracle论坛里有人提到metalink 454196.1,晕,遭遇bug了,还是个未正式发布的bug:Bug 6140224, “SQLPLUS FAILS TO LOAD LIBNNZ11.SO WITH SELINUX ENABLED ON EL5/RHEL5″ 。这个问题只影响到RadHat Enterprise Linux 5,说是其SELinux的模式默认为“Enforcing”,改成“Permissive”模式能暂时解决该问题。

以root身份,通过以下命令查询SELinux的模式:getenforce 默认应当返回Enforcing
通过以下命令更改模式:setenforce 0
然后再次查询getenforce,应该返回permissive了

以上修改在系统重启前有效,重启后系统又会变回默认的enforcing模式。如果需要启动即为permissive模式,则需要在grub的启动项中增加enforcing=0,例如

title Red Hat Enterprise Linux ES (2.6.18-8.EL)
root (hd0,0)
kernel /vmlinuz-2.6.18-8.EL ro root=/dev/VolGroup00/LogVol00 rhgb quiet enforcing=0
initrd /initrd-2.6.18-8.EL.img

另外,也可以通过setupfirewall configuration来设置SELinux的模式。

SQL> select * from v$version;
 
BANNER
------------------------------------------------------------------
--
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

PL/SQL Release 11.1.0.6.0 - Production
CORE    11.1.0.6.0      Production
TNS for Linux: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production

在Redhat Entrerprise Linux 5上安装Oracle11g截图欣赏

Oracle11g在Redhat Enterprise Linux 5上的安装相当顺利,基本上一路“next”即可。详细的安装步骤请参考官方文档:Oracle® Database Installation Guide 11g Release 1 (11.1) for Linux

下面让我们一起欣赏安装截图:

[继续阅读全文]