一条记录里有F1,F2,F3三个属性相同的字段,拆分为3条记录!例如: F1,F2,F3
a b c
d e f
结果:
a
b
c
d
e
f要求:用一条Select 语句,不用union 不用存储过程,做好能给一个ORACLE 的函数。越简洁越好! 在线等待,解决马上送分!
a b c
d e f
结果:
a
b
c
d
e
f要求:用一条Select 语句,不用union 不用存储过程,做好能给一个ORACLE 的函数。越简洁越好! 在线等待,解决马上送分!
解决方案 »
- ORA-06550 PLS-00306的问题 请大虾们帮忙看看!
- 已经有数据的表这么加如一列(自动增加的ID号)
- oracle 存储中的open
- 面试题,谁会?
- 请教,oracle正规培训的价格?(深圳,不需要认证,不管效果,只要显得正规)
- 应用程序delete 不掉PL/SQL develop 插入的数据,请教原因
- 请问大侠几个oracle 9i的问题 谢谢..
- UNIX + oracle 中如何在unix脚本中运行sql脚本?
- 随机数
- 求大神给个linux下安装rac集群详细教程或有这中书的推荐。
- 执行动态sql语句时,sql语句的长度超过4000个字符时应该怎么办?
- 从用户对单位表中找到管理单位最多的用户的SQL应该如何写
呵呵,迪卡尔乘积,少数据还行,多了就不要这样了
不用union 不用存储过程不好实现吧
create table colName as
select column_name
from User_Tab_Columns t where table_name = '表' ;
--建立结果表
create table resultTable
as
select f1 as f from 原表.declare
sqlstr varchar2(500);
v_FN ttt.column_name%type;
cursor c_F is
select column_name from ttt
begin
sqlstr := '';
open c_F;
loop
fetch c_F
into v_FN, v_type;
exit when C_F%notfound;
sqlstr := 'insert into resultTable select ' || v_FN || ' as f from 原表';
-- dbms_output.put_line(sqlstr);
EXECUTE IMMEDIATE sqlstr;
-- exit when C_F%notfound;
end loop;
close C_F;
end;--结果
select * from resultTable;
create or replace type rec_rowret AS OBJECT ( --RECORD
R VARCHAR2
)
/
CREATE OR REPLACE TYPE t_rec_rowret IS TABLE OF rec_rowgen
/CREATE OR REPLACE FUNCTION UF_RowsRet(
ps_f1 VARCHAR2,
ps_f2 VARCHAR2,
ps_f3 VARCHAR2
) RETURN t_rec_rowret PIPELINED PARALLEL_ENABLE IS
ret_rec rec_rowret ;
BEGIN
ret_rec := rec_rowgen(NULL); ret_rec.r := ps_f1; PIPE ROW( ret_rec );
ret_rec.r := ps_f2; PIPE ROW( ret_rec );
ret_rec.r := ps_f3; PIPE ROW( ret_rec );
END;
/select r.r from t, UF_RowsRet(F1,F2,F3) r如果仅是这样,反而觉得有点复杂
CREATE OR REPLACE TYPE t_rec_rowret IS TABLE OF rec_rowret
/