如何从存储过程返回的游标将数据插入临时表

Posted

技术标签:

【中文标题】如何从存储过程返回的游标将数据插入临时表【英文标题】:How to insert data into a temporary table from a cursor returned by a stored procedure 【发布时间】:2019-06-05 23:23:20 【问题描述】:

我正在使用 Oracle 11g,并且我有一个存储过程,可以选择一些数据并将其放入要返回的游标中。我需要将该游标中的数据插入到临时表中,但我不知道如何。希望你能帮助我。

这是我尝试过的方式(它在 SQL Server 中的工作原理):

INSERT INTO tt_IDIOMALISTAS(Idtt, CampoOriginal, CampoModificado, Estado) VALUES sp_SearchSelect(v_CY,v_Idioma,v_SubModule);

这是 SP 内的光标:

open v_refcur for SELECT
   SPD.Id_CombosPorDefecto, SPD.vrc_NombreCombos1, S.vrc_Idioma1, S.vrc_Idioma2, S.vrc_Idioma3
   FROM tbl_Adm_CombosPorDefecto SPD
   LEFT JOIN  tbl_Adm_Combos S
   ON SPD.Id_CombosPorDefecto = S.int_IdComboPorDefecto
   WHERE SPD.int_IdSubModulo = v_SubModule
   AND SPD.FK_CY = v_CY;

【问题讨论】:

为什么不干脆做insert into yourtable(columns) select columns from tablename 一开始就使用光标是一个糟糕的选择。对于 Oracle SQL Server。 【参考方案1】:

SQL(插入脚本)在性能方面优于 PL/SQL & SQL(光标和插入脚本)。

INSERT INTO tt_idiomalistas
    SELECT spd.id_combospordefecto
           , spd.vrc_nombrecombos1
           , s.vrc_idioma1
           , s.vrc_idioma2
           , s.vrc_idioma3
      FROM tbl_adm_combospordefecto spd
      LEFT JOIN tbl_adm_combos s ON spd.id_combospordefecto = s.int_idcombopordefecto
     WHERE spd.int_idsubmodulo = v_submodule
       AND spd.fk_cy = v_cy

【讨论】:

以上是关于如何从存储过程返回的游标将数据插入临时表的主要内容,如果未能解决你的问题,请参考以下文章

oracle存储过程 中把临时表数据 返回结果集

如何在打开游标之前在存储过程中创建一个临时表?

从返回多个结果集的存储过程中插入临时表

将数据从存储过程插入临时表

mssql 里面存储过程插入了条数据之后的返回

使用游标处理存储过程中表中的每一行