如何从存储过程返回的游标将数据插入临时表
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
【讨论】:
以上是关于如何从存储过程返回的游标将数据插入临时表的主要内容,如果未能解决你的问题,请参考以下文章