2017-07-31 55 views
0

我使用以下SQL代碼從其他表導出數據後插入表中。我不擅長高級PL/SQL。我想構建一個存儲過程,實現與我能夠使用此SQL代碼所做的相同的事情。這個想法是,我將執行該過程,它將加載數據,而不是一次又一次地運行此代碼。我嘗試了一些例子,但所有編譯出錯,大多數例子都是SQL服務器格式。將數據插入到使用存儲過程從其他表派生的表中插入數據

Insert into TABLE(ID,NBR,VALUE,DESCRIPTION,STATUS,FILLER,SOURCE_SYSTEM,DATE_LOADED_TIMESTAMP) 
SELECT SUBSTR(COLUMN1,1,2) as ID, 
SUBSTR(COLUMN1,3,3) as NBR, 
SUBSTR(COLUMN1,6,14) as VAUE, 
SUBSTR(COLUMN1,20,30) as DESCRIPTION, 
SUBSTR(COLUMN1,50,1) as STATUS, 
SUBSTR(COLUMN1,51,2) as FILLER, 
SOURCE_SYSTEM as SOURCE_SYSTEM, 
CURRENT_TIMESTAMP AS DATE_LOADED_TIMESTAMP 
from TMP_TABLE; 
+1

所以把上面的'insert'語句轉換的過程。什麼不起作用? –

+0

@WilliamRobertson我只是在錯誤的語法運行不知道這是這麼簡單。只是想知道如果我可以寫入額外的行來插入之前截斷表? – Auguster

回答

0
This may help you: 


     create or replace procedure your_procedure_name 
     as 
     begin 
     Truncate table TABLE; 
     Insert into TABLE(ID,NBR,VALUE,DESCRIPTION,STATUS,FILLER,SOURCE_SYSTEM,DATE_LOADED_TIMESTAMP) 
     SELECT SUBSTR(COLUMN1,1,2) as ID, 
     SUBSTR(COLUMN1,3,3) as NBR, 
     SUBSTR(COLUMN1,6,14) as VAUE, 
     SUBSTR(COLUMN1,20,30) as DESCRIPTION, 
     SUBSTR(COLUMN1,50,1) as STATUS, 
     SUBSTR(COLUMN1,51,2) as FILLER, 
     SOURCE_SYSTEM as SOURCE_SYSTEM, 
     CURRENT_TIMESTAMP AS DATE_LOADED_TIMESTAMP 
     from TMP_TABLE; 

    COMMIT; 
     end; 

Test with: 

    BEGIN 
     your_procedure_name; 
    END; 
+0

如果我想在插入之前截斷表TABLE,可以在插入之前添加額外的行嗎? – Auguster

+0

是的,你可以。我編輯了查詢。 –

相關問題