oracle 行转列的通用过程
原文传送门:http://topic.csdn.net/u/20091019/11/67cd55a3-3f42-4db7-a3f8-91dd52a913cd.html?24122
经常遇到发帖求行列转换的代码,用max(decode(..))回复后,十有八九会再问一句:如果列名不固定,或者列数不固定怎么办。就要用存储过程来写,这些存储过程的代码都大同小异,我就想能不能写个通用点的过程
试了一下,把结果发出来
SQL code
create or replace procedure proc(tabname in varchar2,
col1 in varchar2,
col2 in varchar2,
col3 in varchar2,
viewname in varchar2 default 'v_tmp')
as
sqlstr varchar2(2000):='create or replace view '||viewname||' as select '||col1||' ';
c1 sys_refcursor;
v1 varchar2(100);
begin
open c1 for 'select distinct to_char('||col2||') from '||tabname;
loop
fetch c1 into v1;
exit when c1%notfound;
sqlstr:=sqlstr||'
,max(decode('||col2||','''||v1||''','||col3||'))"'||v1||'"';
end loop;
close c1;
sqlstr:=sqlstr||' from '||tabname||' group by '||col1;
execute immediate sqlstr;
end proc;
这里的几个参数,tabname指的是需要进行行列转换的表名,col1是这个表中行列转换以后要根据哪一列进行分组,那一列的列名。col2传入的是要将行转成列的那一列的列名,col3表示需要进行统计的数据列的列名
viewname传入希望建立的视图的名称,可以不填,默认为v_tmp
这么说很难让人明白..举个例子,引用一个帖子的数据
create table tab (
counter varchar(20), -- 参加考试人数
subject varchar(20), -- 科目
class varchar(20) -- 班级
)
表数据:
counter subject class
36 英语 一班
44 英语 二班
44 数学 二班
33 语文 一班
39 语文 三班
转换后:
相关文档:
关键字: oracle job 间隔时间 trunc
假设你的存储过程名为PROC_RAIN_JM
再写一个存储过程名为PROC_JOB_RAIN_JM
内容是:
Create Or Replace Procedure PROC_JOB_RAIN_JM Is li_jobno Number; &nb ......
一、首先下载
1。到Oracle的OTN站点上下载Oracle10g for Solaris x86的安装盘 http://www.oracle.com/technology ... ocs/solx86soft.html 2。下载完毕以后,得到solarisx86_DB_10_1_0_3_Disk1.cpio.gz文件 解压,生成Disk1目录 $ gunzip -c solarisx86_DB_10_1_0_3_Disk1.cpio.gz | cpio -idmv 然后看oracle 10g fo ......
昨天面试被问到了分段统计,我知道decode可以,面试官接着要我说decode的语法,没回答上来.从网上找的资料稍微改了一下.
DECODE函数是ORACLE PL/SQL是功能强大的函数之一,目前还只有ORACLE公司的SQL提供了此函数,其他数据库厂商的SQL实现还没有此功能。
&nb ......
1.oracle字符集问题:
数据库字符集为ZHS16BGK,汉字在数据库存放的时候占用两个字节
数据库字符集为UTF8,汉字在数据库里存放的时候占用三个字节
由于字符集不同,导致现在数据库IMP的时候有些表的字段长度不够,出现ORA-12899: value too large for column的错误。
通过修改字符集可以解决这种问题。
2.utf-8和unico ......
(1)以SYS身份登陆
conn sys/sysem_pwd as sysdba;
(2)创建amly用户
create user amly identified by 9imly;
(3)创建表空间
create tablespace ts_amly datafile 'd:\amlyfile\test.dbf' size 100M;
(4)将表空间分配给用户
alter user amly default tablespace ts_amly;
(5)给用户授权
grant create sess ......