【问题标题】:Oracle - Create a procedure to insert into a dimension table from multi tablesOracle - 创建一个从多表插入维度表的过程
【发布时间】:2014-11-16 02:58:08
【问题描述】:

我正在为小型电子商务设计一个数据仓库,我需要从两个表 product 和 product_price_history 填充产品的维度表。为简单起见,假设每个表的列如下:

产品(prod_id,品牌) product_price_history (prod_id, price, min_pirce, start_date, end_date) product_dim (prod_key, prod_id, brand, price, min_pirce, start_date, end_date)

我已经有一个名为 prod_seq 的序列来为 product_dimension 表生成键。这是我到目前为止的程序,但我收到了错误:

create or replace 
procedure populate_product_dimension AS
BEGIN
INSERT into product_dim (prod_key, prod_id, brand, price, min_pirce, start_date, end_date)
SELECT seq_prod.nextval FROM DUAL
SELECT prod_id, brand
FROM product
SELECT price, min_pirce, start_date, end_date
FROM product_price_history
WHERE prod_id.product_pric_history = prod_id.product &
prod_id not in(select prod_id from product_dim);
Commit;
End populate_product_dimension;

我认为问题可能与我添加 prod_key 的方式有关。有谁知道更好的方法吗?

【问题讨论】:

    标签: sql oracle plsql procedures


    【解决方案1】:

    SELECT 用于INSERT 的查询。它必须是 JOIN 并且您的语法错误。在引用列时,它必须是 table_name/alias.column_name。

    create or replace 
    procedure populate_product_dimension AS
    BEGIN
    INSERT into product_dim (prod_key, prod_id, brand, price, min_pirce, start_date, end_date)
    SELECT 
           seq_prod.nextval,
           p.prod_id,
           p.brand,
           ph.price,
           ph.min_pirce,
           ph.start_date,
           ph.end_date
    FROM 
           product_price_history ph,
           product p
    WHERE 
          ph.prod_id = p.prod_id
      AND ph.prod_id not in(select prod_id from product_dim);
    
    Commit;
    End populate_product_dimension;
    

    【讨论】:

    • 谢谢先生。做到了!现在假设我想在我的维度表中添加一个状态列,如果 product_history_table 中的 end_date 未设置(null),它会使用 Availble 填充其值,如果不是 No Available。上面的代码有可能吗?
    • NVL2(ph.end_date,'Available','Not Available') 会这样做
    猜你喜欢
    • 1970-01-01
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2018-07-27
    • 2012-07-10
    • 1970-01-01
    相关资源
    最近更新 更多