L OOP в курсор до тех пор, пока каждый IF ELSE не истина в oracle - PullRequest
0 голосов
/ 20 апреля 2020

Я написал cursor, где я хочу L OOP каждый столбец, пока он не станет истинным. Поэтому, если все операторы IF соответствуют true, тогда я хочу вставить данные в таблицу VALID или, наконец, я хочу вставить неверные данные в INVALID TABLE.

Ниже находится курсор. Пожалуйста, дайте мне знать, точен ли мой шаг, или мне нужно внести в это какие-либо изменения.

create or replace procedure fiber_transm_valid_data as 
begin
  for cur_r in (select rj_span_id, 
                       rj_maintenance_zone_name,
                       rj_maintenance_zone_code                
                from app_fttx.transmedia@sat               
               )
  loop               
    if cur_r.rj_span_id > '0' then       
		elsif cur_r.rj_maintenance_zone_name = 'aa' then
			elsif  cur_r.rj_maintenance_zone_code = 'A123' then
				INSERT INTO VALID TABLE 
				(span_id, maintenance_zone_name,rj_maintenance_zone_code)
       values (cur_r.rj_span_id, cur_r.rj_maintenance_zone_name, cur_r.rj_maintenance_zone_code);
	   
	   ELSE
			INSERT INTO INVALID TABLE 
				(span_id, maintenance_zone_name,rj_maintenance_zone_code)
       values (cur_r.rj_span_id, cur_r.rj_maintenance_zone_name, cur_r.rj_maintenance_zone_code);
  end loop;  
end fiber_transm_valid_data;

1 Ответ

1 голос
/ 20 апреля 2020

Не совсем так; IF неверно. Посмотрите на это.

create or replace procedure fiber_transm_valid_data as 
  l_state_name table_of_states.rj_state_name%type;
begin
  for cur_r in (select rj_span_id, 
                       rj_maintenance_zone_name,
                       rj_maintenance_zone_code,
                       rj_state_name
                from app_fttx.transmedia@sat               
               )
  loop         
    select max(rj_state_name) 
      into l_state_name
      from table_of_states
      where rj_state_name = cur_r.rj_state_name
        and rownum = 1;

    if     cur_r.rj_span_id > '0' 
       and cur_r.rj_maintenance_zone_name = 'aa' 
       and cur_r.rj_maintenance_zone_code = 'A123'
       and l_state_name = 1       
    then       
       INSERT INTO VALID_TABLE 
         (span_id, maintenance_zone_name,rj_maintenance_zone_code)
          values 
         (cur_r.rj_span_id, cur_r.rj_maintenance_zone_name, cur_r.rj_maintenance_zone_code);
    else
        INSERT INTO INVALID_TABLE 
          (span_id, maintenance_zone_name,rj_maintenance_zone_code)
           values 
          (cur_r.rj_span_id, cur_r.rj_maintenance_zone_name, cur_r.rj_maintenance_zone_code);
    end if;       
  end loop;  
end fiber_transm_valid_data;
...