2017-07-03 165 views
1

我想在oracle中創建一個過程,從PL SQL塊中調用後,將在數據庫中創建一個視圖,從中查詢報表的數據。我是Oracle新手,需要此代碼的幫助。在Oracle中創建一個過程來創建視圖

CREATE OR REPLACE PROCEDURE CREATE_VIEW 
(
    TO_DT IN Date 
) AS 
BEGIN 
    Create or Replace view BORR_DUR As 
    SELECT e."Deal_No", (Select "DeskName" From MM_S_DESK Where e."DeskCode" = MM_S_DESK."DeskCode") Facility, e."Remarks" Counterparty, 
m."MaturityDate", m."PriRedem" Principal, 

(select MAX("INTEREST_RATE") from MM_BOR_PLA_PAR d 
WHERE e."Deal_No" = d."DEAL_NO" and "INTERESTINPUTDATE" <= to_dt)/100 yield, (m."MaturityDate" - To_date(to_dt,'dd/mm/yyyy')) Days_to_Mat, 
Round(((m."MaturityDate" - To_date(to_dt,'dd/mm/yyyy'))/365)/ (1+((select MAX("INTEREST_RATE") from MM_BOR_PLA_PAR d 
WHERE e."Deal_No" = d."DEAL_NO" and "INTERESTINPUTDATE" <= to_dt)/100)),4) MDURATION 


FROM MM_T_BORROWING e, MM_T_BORROWING_PM_DETAIL m 
Where e."DeskCode" in ('10','11','12','13') and e."Value_Date" <= to_dt and e."Maturity_Date" > to_dt and e."Status" not in ('C', 'D', 'Z', '0','X') 
and e."Deal_No" = m."Deal_No" and "PriRedem" > '0' and m."MaturityDate" > to_dt; 

END CREATE_VIEW; 

在編譯時,我得到PLS00103錯誤,說

遇到的符號 「創建」 期待 之一以下....

解決這個任何幫助時問題將不勝感激。

+0

你需要做的像'EXECUTE IMMEDIATE「創建或替換.....」'全該聲明立即執行。 –

+0

你爲什麼要這樣做?通過編寫一個過程而不是僅僅運行CREATE VIEW語句,你會獲得什麼? –

+0

我寧願運行一個語句,但發現很難直接在PL SQL中運行,Execute Immediate在6i中不可用,並且簡單的執行或執行查詢aint並不適用於我。 –

回答

0

當您要執行的SQL語句是動態的,你必須使用EXECUTE 立即聲明

首先,你不需要在字段名稱雙引號,在這之後,你可以嘗試視圖的查詢和檢查它是否運行沒有錯誤。

把創建替換視圖...聲明的變量,並在過程調用:

BEGIN 
    EXECUTE IMMEDIATE view_string_variable ; 
END; 
/
+0

創建視圖的查詢工作正常,並執行所需的操作。當我把語句放在變量'view_string_variable('創建或替換視圖Borr_Dur爲.....',我得到這個錯誤, 錯誤(11,22):PLS-00103:遇到符號「(」以下之一:常量異常<一個標識符>表long long double ref char time timestamp間隔日期二進制國家字符nchar –

+0

這正是我的問題所在,我嘗試了一個簡單的查詢,除了我有價值之外,其他一切都很好在查詢本身作爲字符串進行時,它在查詢中作爲字符串傳遞。所以不能編譯('10','11')等值。我嘗試用雙重替換單引號,但它沒有幫助。 –