Вы можете привязать тип к строке таблицы, между прочим. Существуют различные способы использования этих вещей в зависимости от ваших требований.
В вашем запросе есть объединение, поэтому вы можете объявить тип, соответствующий каждой строке из курсора, и затем вы можете объявить строго типизированный тип курсора дляваш тип строкиПозже вы можете назначить запрос переменной этого типа курсора.
Вы можете передавать курсоры в качестве параметров хранимым процедурам, и вы можете иметь процедуру, возвращающую тип курсора, и вы можете объявлять переменные каждого изтипы, которые вы создаете.
Вы не показываете, хотите ли вы, чтобы набор результатов процедуры был типом курсора, или вы хотите обработать набор результатов внутри хранимой процедуры в набранном видепеременные.
Изучите Db2 Knowledge Center для своей версии Db2-LUW, чтобы узнать о строго типизированных курсорах и о том, как их использовать в SQL PL. модуля, но вы можете использовать те же приемы в хранимых процедурах) в этом файле "modules.db2", который также появляется в каталоге SAMPLES на вашем сервере DB2-LUW, если вы установили компонент примеров во время установки. * Вы можете увидеть пример онлайн на пример modules.sql
Вот одно предложение для использования пользовательских типовдля типа строки, который соответствует курсору в вашем коде:
--#SET TERMINATOR @
-- this type represents a row that might be returned in the cursor.
-- Choose your own name for the type.
-- Choose the correct data-types for your tables.
create or replace type DE_ROW_T as row
(
id_mes bigint,
ID_DISTRIBUIDOR_SO bigint,
CNPJ_DISTRIBUIDOR_SO bigint,
ID_COMPANIA bigint
)@
create or replace type C_ID_DIST_ERRADOS_CURSOR_T as DE_ROW_T CURSOR@
create or replace PROCEDURE "SP_ATUALIZA_ID_DISTRIBUIDOR_FT"
language sql
specific SP_ATUALIZA_ID_DISTRIBUIDOR_FT
BEGIN
DECLARE V_ROW DE_ROW_T;
DECLARE C_ID_DIST_ERRADOS C_ID_DIST_ERRADOS_CURSOR_T;
SET C_ID_DIST_ERRADOS = CURSOR FOR
SELECT DISTINCT
F.ID_MES,
F.ID_DISTRIBUIDOR_SO,
D.CNPJ_DISTRIBUIDOR_SO,
F.ID_COMPANIA
FROM
DMTLDBR.TB_FATO_VENDAS_SELLOUT F,
DMTLDBR.TB_DIM_ECDISTRIBUIDOR_SO D
WHERE ID_MES <= 201309 AND
F.ID_DISTRIBUIDOR_SO = D.ID_DISTRIBUIDOR_SO AND
F.ID_COMPANIA <> D.ID_COMPANIA
ORDER BY ID_MES;
OPEN C_ID_DIST_ERRADOS;
FETCH C_ID_DIST_ERRADOS INTO v_row;
END@