Ниже приведен PL/SQL. Проблема в том, что поток не входит в цикл. Я не могу понять, в чем проблема. Оба запроса возвращают результаты, т. Е. Запрос в цикле, и запрос в цикле возвращает результаты.Поток не входит в цикл
DECLARE
p_file_name VARCHAR2(4000) :='GHCPExtract_100_005_2011052218000700.csv';
v_file_name VARCHAR2(4000) :='' || '''' || p_file_name ||'''';
v_count NUMBER :=0;
v_loop NUMBER :=0;
begin
DBMS_OUTPUT.PUT_LINE('BEFORE LOOP');
FOR C IN (
SELECT
S.SOURCE_TRX_KEY_SEGMENT1 ,
S.SOURCE_TRX_KEY_SEGMENT2 ,
S.SOURCE_TRX_KEY_SEGMENT3 ,
S.SOURCE_TRX_KEY_SEGMENT4 ,
S.SOURCE_TRX_KEY_SEGMENT5 ,
S.SOURCE_TRX_KEY_SEGMENT6
FROM DM_RS.STG_GHCP_EXTRACT S
WHERE S.SOURCE_FILE_NAME = v_file_name
)
LOOP
DBMS_OUTPUT.PUT_LINE('IN LOOP');
BEGIN
select
1
into
v_count
from
(
select
T.SOURCE_TRX_KEY_SEGMENT1 ,
T.SOURCE_TRX_KEY_SEGMENT2 ,
T.SOURCE_TRX_KEY_SEGMENT3 ,
T.SOURCE_TRX_KEY_SEGMENT4 ,
T.SOURCE_TRX_KEY_SEGMENT5 ,
T.SOURCE_TRX_KEY_SEGMENT6
from
GTT_SEGMENT_ID t
WHERE 1=1
AND
T.SOURCE_TRX_KEY_SEGMENT1 = C.SOURCE_TRX_KEY_SEGMENT1
and
T.SOURCE_TRX_KEY_SEGMENT2 = C.SOURCE_TRX_KEY_SEGMENT2
and
T.SOURCE_TRX_KEY_SEGMENT3 = C.SOURCE_TRX_KEY_SEGMENT3
and
T.SOURCE_TRX_KEY_SEGMENT4 = C.SOURCE_TRX_KEY_SEGMENT4
and
T.SOURCE_TRX_KEY_SEGMENT5 = C.SOURCE_TRX_KEY_SEGMENT5
and
T.SOURCE_TRX_KEY_SEGMENT6 = C.SOURCE_TRX_KEY_SEGMENT6
and t.source_file_name = v_file_name
);
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_count := 0;
END;
IF (v_count = 1)
THEN
V_LOOP := V_LOOP +1;
END IF;
END LOOP;
DBMS_OUTPUT.PUT_LINE(V_LOOP);
END;
DBMS_OUTPUT
ПЕРЕД LOOP
, что делает 'выбрать source_file_name из dm_rs.stg_ghcp_extract, где нижний (source_file_name) как '% ghcpextract_100_005_2011052218000700.csv%';' вернуться? – Boneist
source_file_name. i.e source_file_name - это входной параметр, такой как ghcpextract_100_005_2011052218000700.csv –
Вы действительно выполнили запрос, который я предложил, или вы просто догадываетесь? Я спрашиваю, потому что я был бы очень удивлен, если имя файла хранится в таблице с одинарными кавычками вокруг него. Это объясняет, почему ваш код не может войти в цикл. Кроме того, какова цель этого кода? Это просто учебное упражнение, или вы пытаетесь что-то сделать с возвращенными данными? Похоже, вы делаете очень странный (не говоря уже о медленном) способе тестирования, существует ли строка в другой таблице или нет. Но что вы будете делать с полученной информацией? – Boneist