oracle存储过程

如图,我有一个存储过程(示例),我想要(SELECT MAX(SJ) AS SJ FROM TEST10086)这个值如果 <> '2023',就只展示SELECT * FROM TEST3 (不用union TEST1/TEST2 )该怎么修改,求大神解惑

CREATE OR REPLACE PROCEDURE P_TEST

AS

BEGIN

DELETE FROM TEST WHERE SJ = (SELECT MAX(SJ) AS SJ FROM TEST10086);

INSERT INTO TEST

WITH 

TEST1 AS 

( SELECT ID,DJ FROM A),

TEST2 AS 

( SELECT ID,DJ FROM B),

TEST3 AS 

( SELECT ID,DJ FROM C),

HZ AS 

(

SELECT * FROM TEST1

UNION ALL 

SELECT * FROM TEST2

UNION ALL 

SELECT * FROM TEST3 

)

SELECT ID,SUM(DJ) FROM HZ GROUP BY ID;

END ;

1.png

SQL yzm163059 发布于 2024-1-25 15:40 (编辑于 2024-1-25 15:55)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
1
CD20160914Lv8专家互助
发布于2024-1-25 15:59

试一下?没有测试过

bl NUMBER : := 你那段sql;

 IF v_num !=2023 THEN

   select * from test3;

  ELSE

   select * from test1

   union all

   select * from test2

   union all

   select * from test3

  END IF;

最佳回答
1
用户k6280494Lv6资深互助
发布于2024-1-25 16:01

CREATE OR REPLACE PROCEDURE P_TEST

AS

maxSj VARCHAR2(50);  

BEGIN

maxSj := SELECT MAX(SJ) AS SJ FROM TEST10086;

DELETE FROM TEST WHERE SJ = (SELECT MAX(SJ) AS SJ FROM TEST10086);

INSERT INTO TEST

WITH 

TEST1 AS 

( SELECT ID,DJ FROM A),

TEST2 AS 

( SELECT ID,DJ FROM B),

TEST3 AS 

( SELECT ID,DJ FROM C),

HZ AS 

(

IF maxSj != '2023'  THEN  

   SELECT * FROM TEST1

  ELSE  

   

SELECT * FROM TEST1

UNION ALL 

SELECT * FROM TEST2

UNION ALL 

SELECT * FROM TEST3 

  END IF; 

)

SELECT ID,SUM(DJ) FROM HZ GROUP BY ID;

END ;

 

最佳回答
0
gi犟Lv3见习互助
发布于2024-1-25 15:59

在下面union 中的 test1 和 test2 中加条件  where case when max(Sj) <> '2023' then 2 else 1 end = 1 如果不等于2023 就给他弄个1=2 就查不出来东西

  • yzm163059 yzm163059(提问者) test1/test2 里边没有sj的这个字段,只有insert的表里边有
    2024-01-25 16:02 
  • 4关注人数
  • 199浏览人数
  • 最后回答于:2024-1-25 16:01
    请选择关闭问题的原因
    确定 取消
    返回顶部