我有一个特定的用例,其中行值需要动态转换为视图列标题。之所以需要视图,是因为列名取决于可以随时更改的输入表的行值。
Item Class Attribute Attribute_Val
------ ------- ---------- -------------
Apple Fruit Name Gala
Apple Fruit Color Red
Apple Fruit Origin USA
Apple Fruit Price 3
Mango Fruit Name Alphonso
Mango Fruit Color Yellow
Mango Fruit Origin MEX, IND
Mango Fruit Price 5
Item Class Name Color Origin Price
------ ------- ----- ------ ------ -----
Apple Fruit Gala Red USA 3
Mango Fruit Alphonso Yellow MEX,IND 5
让我们说明天为“水果”类添加一个新的属性(季节)。它将在输入表中产生2行(每行分别用于Apple和Mango项目),并且该视图应能够在其输出中动态添加新列“ Season”。
这可以通过Oracle View或Function完成吗?
答案 0 :(得分:1)
使用pwd
:
Oracle 11g R2架构设置:
set path+=/some/src
查询1 :
PIVOT
Results :
CREATE TABLE table_name ( Item, Class, Attribute, Attribute_Val ) AS
SELECT 'Apple', 'Fruit', 'Name', 'Gala' FROM DUAL UNION ALL
SELECT 'Apple', 'Fruit', 'Color', 'Red' FROM DUAL UNION ALL
SELECT 'Apple', 'Fruit', 'Origin', 'USA' FROM DUAL UNION ALL
SELECT 'Apple', 'Fruit', 'Price', '3' FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Name', 'Alphonso' FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Color', 'Yellow' FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Origin', 'MEX, IND' FROM DUAL UNION ALL
SELECT 'Mango', 'Fruit', 'Price', '5' FROM DUAL;
让我们说明天为“水果”类添加一个新的属性(季节)。它将在输入表中产生2行(每行分别用于Apple和Mango项目),并且该视图应能够在其输出中动态添加新列“ Season”。
否,这是不可能的。视图在编译时确定有固定的列数,并且将数据(或列)添加到父表不会更新该视图。