根据可变条件执行存储过程

时间:2019-04-15 07:45:51

标签: oracle stored-procedures plsql

环境:Oracle SQL Developer

方案:要比较2个不同表中的度量并在条件满足的情况下运行存储过程

试图将每个表的度量存储在变量中,并比较变量并执行存储过程

delete
  1. 我无法将值存储在--For Variable1 Declare Variable1 int; Begin select sum(sales) from table1 into Variable1; end; --For Variable2 Declare Variable2 int; Begin select sum(sales) from table2 into Variable2; end --Creating stored procedure CREATE OR REPLACE PROCEDURE Proc1 as BEGIN IF (Variable1=Variable2) THEN PROC2() END IF; END Proc1; Variable1
  2. 我无法使用条件运行存储过程

2 个答案:

答案 0 :(得分:2)

正确的语法是select ... into ... from ..

如果要在proc1中使用变量,则应在该proc中定义它们。

CREATE OR REPLACE PROCEDURE Proc1 as 
  Variable1 int;
  Variable2 int;    
BEGIN
  select sum(sales) into Variable1 from table1 ;
  select sum(sales) into Variable2 from table2 ;

  IF (Variable1=Variable2) THEN
    PROC2();
  END IF;
END Proc1;    

或者您可以将值作为参数传递

CREATE OR REPLACE PROCEDURE Proc1(Variable1 in int, Variable2 in int) as 

BEGIN
  -- Using Parameter values   
  IF (Variable1=Variable2) THEN
    PROC2();
  END IF;

END Proc1;
/

Declare
  Variable1 int;
  Variable2 int;
Begin 
  select sum(sales)  into Variable1 from table1;
  select sum(sales)  into Variable2 from table2;
  -- pass values into the procedure
  proc1( Variable1,Variable2 );   
END;

/

答案 1 :(得分:0)

您的变量仅在每个PL / SQL块的持续时间内有效。 因此,如果要比较variable1和variable2,则必须将它们放在同一PL / SQL块中。 那会给你的:

Declare
 Variable1 int;
 Variable2 int;
Begin 
select sum(sales) into Variable1 from table1;
select sum(sales) into Variable2 from table2;
IF Variable1 = Variable2 THEN
  PROC2;
END IF;
END;
/

并非所有这些代码都可以在匿名PL / SQL块中。 如果愿意,还可以将其存储在过程中。