Выполнение хранимой процедуры на основе переменных условий - PullRequest
0 голосов
/ 15 апреля 2019

Среда: Oracle SQL Developer

Сценарий: сравнить показатель из 2 разных таблиц и запустить хранимую процедуру, если условие удовлетворяет

Попытка сохранить показатель каждой таблицы внутри переменнойи сравнить переменные и выполнить хранимую процедуру

--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;
  1. Я не могу сохранить значение внутри Variable1 и Variable2
  2. Я не могу запуститьхранимая процедура с использованием условия

Ответы [ 2 ]

2 голосов
/ 15 апреля 2019

Правильный синтаксис: select ... into ... from ..

Если вы хотите использовать свои переменные в proc1, вы должны определить их в этом процессе.

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;

/

0 голосов
/ 15 апреля 2019

Ваши переменные живут только в течение каждого блока 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. Вы также можете сохранить его в процедуре, если хотите.

...