Вам необходимо объявить переменную перед тегом BEGIN, в котором она должна использоваться
create or replace PROCEDURE AAA(cv_1 IN OUT SYS_REFCURSOR)
as
ord_t VARCHAR2(20);
BEGIN
SELECT order_type into ord_t from BT;
dbms_output.Put_line(ord_t);
if ord_t = 'xxx' THEN
open cv_1 for
select * from BA;
else
open cv_1 for
select * from BB;
END if;
END;
В процедурах CREATE OR REPLACE PROCEDURE name(params) AS
заменяет DECLARE
блока.Поэтому он вам здесь не нужен.
Определение блока:
DECLARE or CREATE FUNCTION/PROCEDURE
(variables in block)
BEGIN
(code using variables)
END
Примеры:
declare
myvar number(1);
begin
--begin scope of myvar--
select 1 into myvar from dual;
--end scope of myvar--
end;
create procedure myproc (var1 in number)
as
myvarouter number(1);
begin
--begin scope myvarouter--
declare
myvarinner number(1);
begin
--begin scope myvarinner--
select 1 into myvarinner from dual;
select 1 into myvarouter from dual;
--end scope myvarinner--
end;
select 1 into myvarouter from dual;
--end scope myvarouter--
end;
Другой вопрос с тем же содержанием может такжеможно найти здесь