2017-07-31 57 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

是的,你可以。我编辑了查询。 –

相关问题