簡體   English   中英

Oracle-創建一個過程以從多個表插入維表

[英]Oracle - Create a procedure to insert into a dimension table from multi tables

我正在為一個小型電子商務設計一個數據倉庫,我需要為兩個表product和product_price_history中的產品填充一個維表。 為了簡單起見,假設每個表的列如下:

產品(prod_id,品牌)product_price_history(prod_id,價格,min_pirce,start_date,end_date)product_dim(prod_key,prod_id,品牌,價格,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而引起的。 有人知道更好的方法嗎?

用於INSERT SELECT查詢。 它必須是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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM