通过选择插入的 oracle 存储过程
Posted
技术标签:
【中文标题】通过选择插入的 oracle 存储过程【英文标题】:oracle stored procedure to insert via select 【发布时间】:2014-03-31 13:49:29 【问题描述】:我正在编写一个存储过程,其中我有 2 个复杂的连接选择查询,它又是外部连接的。结果需要通过存储过程插入到另一个表中。
您是否发现以下存储过程的语法有任何问题: 任何有关语法的帮助将不胜感激。
create or replace
PROCEDURE STATS_PROCEDURE(
column1 varchar2,
column2 varchar2,
column3 varchar2,
column4 varchar2,
) IS
BEGIN
insert into STATS_PRODUCT
column1 , column2 , column3 , column4)
select table1.column1, table1.column2 from
(SELECT column1, column2 from table_name) table1
FULL OUTER JOIN
(select column3, column4 from table_name) table2
on
table1.column1 = table2.column1 and table1.column2 = table1.column2
END;
提前致谢!
【问题讨论】:
编译这段代码会报什么错误?请编辑您的问题并包含此信息。谢谢。 【参考方案1】:在您的 INSERT
子句中您指定了 4 列,但在您的 SELECT
语句中您只完成了 2 列,您需要修改查询以包括 SELECT
中的所有 4 列,如下所示
BEGIN
INSERT INTO STATS_PRODUCT
( column1
,column2
,column3
,column4
)
SELECT table1.column1
,table1.column2
,table2.column3 --Added
,table2.column4 --Added
FROM (
SELECT column1
,column2
FROM table_name
) table1
FULL OUTER JOIN (
SELECT column3
,column4
FROM table_name
) table2
ON table1.column1 = table2.column1
AND table1.column2 = table1.column2
END;
作为替代方案,您可以使用WITH
子句进行重写,使其更易于阅读
WITH table1
AS (
SELECT column1
,column2
FROM table_name
),
table2
AS (
SELECT column1
,column2
,column3
,column4
FROM table_name
)
INSERT INTO STATS_PRODUCT
( column1
,column2
,column3
,column4
)
SELECT t1.column1
,t1.column2
,t2.column3
,t2.column4
FROM table1 AS t1
FULL OUTER JOIN table2 AS t2
ON t1.column1 = t2.column1
AND t1.column2 = t2.column2
【讨论】:
以上是关于通过选择插入的 oracle 存储过程的主要内容,如果未能解决你的问题,请参考以下文章