假如已经有表
产品 用户
1 a
2 b
3 c
.. ..
100 n要创建表如下;
用户 1 2 3 4 .... 100
a 1 0
b 0 1
c ...
..
n也就是要创建一个表,统计用户拥有哪些产品,有就输入1,没有就输入0可是因为列数太多了,所以一列列去alter很麻烦,有没有办法自动生成列,并且通过pl/sql实现自动统计用户是否拥有产品呢?求教!公司的人出来考我的问题,很遗憾看了一段时间的Oracle,感觉用于这种实际的操作,还是完全没有思路
产品 用户
1 a
2 b
3 c
.. ..
100 n要创建表如下;
用户 1 2 3 4 .... 100
a 1 0
b 0 1
c ...
..
n也就是要创建一个表,统计用户拥有哪些产品,有就输入1,没有就输入0可是因为列数太多了,所以一列列去alter很麻烦,有没有办法自动生成列,并且通过pl/sql实现自动统计用户是否拥有产品呢?求教!公司的人出来考我的问题,很遗憾看了一段时间的Oracle,感觉用于这种实际的操作,还是完全没有思路
随便写了一个,未调式
CREATE OR REPLACE PROCEDURE row2col(o OUT SYS_REFCURSOR) IS
sqlstr VARCHAR2(32760) := '';
BEGIN
FOR cc IN (SELECT distinct 产品 FROM t_table) LOOP
sqlstr := sqlstr || 'sum(decode(产品,''' || cc.产品 ||''',1)) as "产品_'
|| cc.产品 || '",';
END LOOP;
sqlstr := 'create table t_newtable as select 用户,' || rtrim(sqlstr,',') || ' from t_table group by 用户';
execute immediate sqlstr;
END row2col;
CREATE OR REPLACE PROCEDURE P_pcoo1 IS
V_SQL VARCHAR2(32760);
CURSOR CURSOR_1 IS SELECT DISTINCT p.prod_id FROM pcoo p ORDER BY prod_id;
BEGIN
V_SQL := 'SELECT cust_id';
FOR V_prod_id IN CURSOR_1
LOOP
V_SQL := V_SQL || ',' || 'SUM(DECODE(prod_id,''' || V_prod_id.prod_id ||
''',sign(cust_id),0)) AS ' || V_prod_id.prod_id;
END LOOP;V_SQL := V_SQL || ' FROM pcoo GROUP BY cust_id ORDER BY cust_id';
V_SQL := 'CREATE OR REPLACE VIEW RESULT AS '|| V_SQL;
EXECUTE IMMEDIATE V_SQL;
END;出现这个错误
ORA-00923: 未找到要求的 FROM 关键字
ORA-06512: 在 "SYS.P_PCOO1", line 14
ORA-06512: 在 line 3
但是我实在是找不出来这个过程哪里出错了,为什么会找不到from关键字?有没有高手能再指点一下吗?