create function fmerg(id in number)
returns varchar2
as
str varchar(8000);
beginfor x in select * from tableA
loop
str:=str||to_char(substr)||',';
end loop;
return str;
End
returns varchar2
as
str varchar(8000);
beginfor x in select * from tableA
loop
str:=str||to_char(substr)||',';
end loop;
return str;
End
解决方案 »
- 想问个oracle小问题
- 为日期字段建立索引后 查询的结束日期为什么要加1
- ORACLE触发器问题
- Oracle 9i SQL*Plus 登陆错误
- 请问各位这个查询在Oracle中怎么写?
- oracle拆卸后装不上是什么原因
- pl/sql存储过程返回record类型和集合类型(is table of record)的结果,Java里如何调用呢?
- 请问各位高手:SQL语句命中率是怎么回事?在oracle v$的那个视图可以查到相关性能指标以及如何计算?
- 大家好,请帮我看看---给你加星星!
- Oracle8.1.7在linux Redhat7.2上的安装问题(在线等待)
- oracle9i的密码忘了,不能打开了
- 请教大虾:ORA-03212 无法创建临时段
DECLARE
TYPE phoneNum IS TABLE OF tb_phone_no%ROWTYPE INDEX BY BINARY_INTEGER; /*声明索引表类型*/
selPart phoneNum; /*声明索引表类型变量*/
loopCount INTEGER;
colTotal INTEGER:=5; /*总计列数*/ CURSOR curSel IS /*声明游标*/
SELECT phone_no,city_code,city_name,state,type
FROM tb_phone_no
WHERE phone_no in ('1333241','1339414','1334237','1333222','1332230');BEGIN
loopCount:=0;
OPEN curSel; /*打开游标*/
FETCH curSel INTO selPart(loopCount); /*从游标中检索数据行*/
WHILE curSel%FOUND LOOP /*当不再能找到数据时,终止查询*/
loopCount:=loopCount+1;
FETCH curSel INTO selPart(loopCount);
END LOOP;
CLOSE curSel; /*关闭游标*/ DBMS_OUTPUT.PUT_LINE('正常显示:');
loopCount:=selPart.FIRST;
LOOP
DBMS_OUTPUT.PUT_LINE(selPart(loopCount).phone_no ||
' ' || selPart(loopCount).city_code ||
' ' || selPart(loopCount).city_name ||
' ' || selPart(loopCount).state ||
' ' || selPart(loopCount).type);
EXIT WHEN loopCount=selPart.LAST;
loopCount:=selPart.NEXT(loopCount);
END LOOP;
DBMS_OUTPUT.PUT_LINE('------------------------------------------------');
DBMS_OUTPUT.PUT_LINE('行列转换:'); FOR loopCount IN 0..colTotal-1 LOOP
DBMS_OUTPUT.PUT(selPart(loopCount).phone_no || ' ');
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
FOR loopCount IN 0..colTotal-1 LOOP
DBMS_OUTPUT.PUT(selPart(loopCount).city_code || ' ');
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
FOR loopCount IN 0..colTotal-1 LOOP
DBMS_OUTPUT.PUT(selPart(loopCount).city_name || ' ');
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
FOR loopCount IN 0..colTotal-1 LOOP
DBMS_OUTPUT.PUT(selPart(loopCount).state || ' ');
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
FOR loopCount IN 0..colTotal-1 LOOP
DBMS_OUTPUT.PUT(selPart(loopCount).type || ' ');
END LOOP;
DBMS_OUTPUT.PUT_LINE('');
END;
谢谢
数据库不熟悉。
最好能有简单的SQL语句就可以。比如就:
表中只有1条纪录
col1 col2 col3 col4
1 2 3 4然后如何得到列1 列2
col1 1
col2 2
col3 3
col4 4
SQL> SELECT * FROM TEST_TAB;COL_A COL_B
---------- ----------
A 1
A 2
B 2
B 3
C 4
D 1
D 12
D 121
D 129 rows selectedSQL> SELECT SUM(DECODE(COL_A,'A',COL_B,0)) A,SUM(DECODE(COL_A,'B',COL_B,0)) B,
2 SUM(DECODE(COL_A,'C',COL_B,0)) C,SUM(DECODE(COL_A,'D',COL_B,0)) D
3 FROM TEST_TAB; A B C D
---------- ---------- ---------- ----------
3 5 4 146--行转列我想的方法只有用过程了:)
SQL> select * from test_table; A B C D
---------- ---------- ---------- ----------
3 5 4 146SQL> select decode(id,1,A,2,B,3,C,4,D) FROM
2 (select * from (select * from test_table,(select rownum id from dual connect by rownum <= 4)));DECODE(ID,1,A,2,B,3,C,4,D)
--------------------------
3
5
4
146但是楼主需要把列名:col1,col2也变成数据这就很难在一个SQL语句上实现了
首先要查看数据表的栏位还看你对user_tab_columns这个视图是否有查询权限
我的表是col1 col2 col3 col4 col5 col6(该列值唯一)
1 2 3 4 5 20061206
6 7 8 9 9 20061208
10 11 12 13 14 20061209输入一个参数(col6,如20061206),得到列1 列2
col1 1
col2 2
col3 3
col4 4
col5 5
col6 20061206
建立临时表包含栏位(col_name,value1,value2,value3)
insert into 临时表 (col_name)
select column_name from user_tab_columns where table_name ='your_table' ;下面的就简单了,一个一个栏位的比较UPDATE数值就可以