У меня есть следующий код:
WHILE (v_Count > 0)
LOOP
Select v_Columns || CHR(10) || CHR(9) || ColumnName || ',' ,
v_Values || CHR(10) || CHR(9) ||
CASE ISNUMERIC(Val)
WHEN 1 THEN Val
WHEN 0 THEN '''' || REPLACE(LTRIM(RTRIM(Val)), '''','''''') || ''''
END
|| ',' into v_Columns,v_Values
FROM
(
SELECT D.TableName, D.ColumnName, D.Val
FROM
(
SELECT ID, TableName, ColumnName, Val
FROM tblTemplates_Load_OtherObjects_Raw OO
JOIN tblTemplates_Fields F ON OO.OtherObjectsField = F.FieldName
WHERE TemplateType IN ('All', v_TemplateType)
AND OO.Val IS NOT NULL
AND (TemplateVersion = p_TemplateVersion or (TemplateVersion is null
and p_TemplateVersion <> 'V8'))
UNION
SELECT FieldID, TableName, ColumnName, Val
FROM tblTemplates_Fields_OtherDestinations OD
JOIN
(
SELECT ID, Val
FROM tblTemplates_Load_OtherObjects_Raw OO
JOIN tblTemplates_Fields F ON OO.OtherObjectsField = F.FieldName
WHERE TemplateType IN ('All', v_TemplateType)
AND OO.Val IS NOT NULL
AND (TemplateVersion = p_TemplateVersion or (TemplateVersion is
null and p_TemplateVersion <> 'V8'))
) UsedIDs
ON OD.FieldID = UsedIDs.ID
) D
JOIN USER_TAB_COLS C ON upper(D.TableName) = upper(C.TABLE_NAME) AND
upper(D.ColumnName) = upper(C.COLUMN_NAME)
WHERE (v_UpdateComp = 0 OR D.TableName <> 'tblComp')
AND (v_UpdateCompInd = 0 OR D.TableName <> 'tblCompInd')
ORDER BY D.TableName, D.ColumnName
)
WHERE TableName = v_TableName ;
v_Count := v_Count -1;
end loop;
, где v_count - число и может принимать значения от 5 до 6.
Проблема здесь в том, что из-за циклическогоболее одного значения пытается быть сохранено в v_Columns и v_Values и получение точной выборки возвращает больше, чем запрошенное количество строк ошибка.Я не могу понять, как переписать этот кусок кода, чтобы он работал нормально.
Как я могу переписать этот код?