Я создал эту процедуру.Процедура занимает много времени
DECLARE
cur SYS_REFCURSOR;
age_compare_group varchar(100);
state_compare varchar(100);
gender_compare varchar(100);
income_compare_groups varchar(100);
goal varchar(100);
valuestring varchar(100);
BEGIN
OPEN cur FOR
'select distinct a.age_compare_group, s.state_compare , g.gender_compare, i.income_compare_groups,goal_types.goal,goal_types.valuestring
from age_group a ,
state s ,
gender g ,
income_Group i ,
(select ''goal'' as GOAL, valuestring
from appldata
where dataname like ''GOAL_CAT%''
and datavalue in (select idcategory
from goal_categories
where typeuser = ''ECU''
and id_entity = ''B001''))goal_types';
LOOP
-- process each row one at a time
FETCH cur into age_compare_group,state_compare, gender_compare,income_compare_groups,goal,valuestring;
insert into temp_test values (state_compare ,age_compare_group);
END LOOP;
CLOSE cur;
END;
Но для этого требуется много времени.
Я просто хочу знать, что так происходит, и мы можем его оптимизировать в любом случае.
В вашем запросе нет соединений. Вы создаете декартовую продукцию между состоянием, полом, доходом и вложенным выбором - неудивительно, что он работает медленно. И дополнительно: вам вообще не нужен курсор. Но сначала начните с получения права 'select'. Также: начните использовать явный синтаксис' JOIN' вместо предполагаемых неявных объединений - если бы вы сделали это с самого начала, вы бы не создали декартовой продукт в первую очередь. –
да, потому что это я хотел. –
Вы * хотите * декартовой продукт между всеми этими таблицами? Вы понимаете, что это такое? Я очень сомневаюсь, что ты действительно этого хочешь. И если вы это сделаете, то почему вы устраняете все дубликаты, которые создаются из-за декартова продукта, используя предложение 'distinct'? –