使用存储过程将数据插入从其他表派生的表中

Posted

技术标签:

【中文标题】使用存储过程将数据插入从其他表派生的表中【英文标题】:Insert data into table derived from other table using stored procedure 【发布时间】:2017-07-31 17:59:26 【问题描述】:

我使用以下 sql 代码在从其他表派生后将数据插入到表中。我不是高级 PL/SQL 方面的专家。我想构建一个存储过程,以实现与此 SQL 代码相同的功能。这个想法是我将只执行该过程,它将加载数据而不是一次又一次地运行此代码。我尝试了一些示例,但都在编译时出错,并且大多数示例都是 SQL server 格式。

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;

【问题讨论】:

所以把上面的insert语句放到一个过程中。什么不工作? @WilliamRobertson 我只是在错误的语法中运行,不知道这么简单。只是想知道我是否可以在插入之前编写额外的行来截断表格? 【参考方案1】:
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;

【讨论】:

如果我想在插入之前截断表 TABLE 可以在插入之前添加额外的行吗?

以上是关于使用存储过程将数据插入从其他表派生的表中的主要内容,如果未能解决你的问题,请参考以下文章

带游标的Mysql存储过程

使用存储过程插入表?

如何设置“以属性的形式将xml数据插入到SQL Server2008数据库的表中”的存储过程

将链接服务器存储过程中的数据插入表中

使用存储过程将数据从 SQL 表插入 Excel

SQL Server 存储过程创建临时表并插入值