# ROWSORT_TIPI ## Codice Sorgente ```sql PROCEDURE "ROWSORT_TIPI" ( p_direc_cod IN VARCHAR2, o_return OUT CLOB ) AS v_direc VARCHAR2(4); v_cod_tipo VARCHAR2(10); v_cod_step NUMBER; v_cod_step_new NUMBER; v_return CLOB; BEGIN -- Separo i valori in entrata su p_direc_cod 'direc_cod' in un array ( Es: 'desc_AN' => [ 'desc', 'AN' ] ) ---- Seleziono la direzione (asc o desc) SELECT upper(result) INTO v_direc FROM TABLE ( string_to_table_enum(p_string => p_direc_cod, v_level => 0, p_separator => '_') ) WHERE id = 1; ---- Seleziono l'cod_tipo della riga da spostare SELECT upper(result) INTO v_cod_tipo FROM TABLE ( string_to_table_enum(p_string => p_direc_cod, v_level => 0, p_separator => '_') ) WHERE id = 2; IF v_direc = 'ASC' THEN -- Seleziono i numeri di riga SELECT cod_step, cod_step - 1 INTO v_cod_step, v_cod_step_new FROM tb_tipi_mat WHERE upper(TRIM(cod_tipo)) = upper(TRIM(v_cod_tipo)); -- Libero i numeri di riga richiesti -- diminuendo il numero di riga di un valore inutilizzato (Es: 0.5) UPDATE tb_tipi_mat SET cod_step = cod_step - 0.5 WHERE cod_tipo = v_cod_tipo; UPDATE tb_tipi_mat SET cod_step = cod_step - 0.5 WHERE cod_step = v_cod_step_new; -- Sposto la riga precedente al posto di quella selezionata (Es: row 1 diventerà row 2) UPDATE tb_tipi_mat SET cod_step = v_cod_step WHERE cod_step = v_cod_step_new - 0.5; -- Sposto la riga selezionata al nuovo posto UPDATE tb_tipi_mat SET cod_step = v_cod_step_new WHERE cod_tipo = v_cod_tipo; v_return := 'cod_tipo: ' || v_cod_tipo || ' - From Row ' || v_cod_step || ' - To Row ' || v_cod_step_new; ELSIF v_direc = 'DESC' THEN -- Seleziono i numeri di riga SELECT cod_step, cod_step + 1 INTO v_cod_step, v_cod_step_new FROM tb_tipi_mat WHERE upper(TRIM(cod_tipo)) = upper(TRIM(v_cod_tipo)); -- Libero i numeri di riga richiesti -- diminuendo il numero di riga di un valore inutilizzato (Es: 0.5) UPDATE tb_tipi_mat SET cod_step = cod_step + 0.5 WHERE cod_tipo = v_cod_tipo; UPDATE tb_tipi_mat SET cod_step = cod_step + 0.5 WHERE cod_step = v_cod_step_new; -- Sposto la riga precedente al posto di quella selezionata (Es: row 1 diventerà row 2) UPDATE tb_tipi_mat SET cod_step = v_cod_step WHERE cod_step = v_cod_step_new + 0.5; -- Sposto la riga selezionata al nuovo posto UPDATE tb_tipi_mat SET cod_step = v_cod_step_new WHERE cod_tipo = v_cod_tipo; v_return := 'cod_tipo: ' || v_cod_tipo || ' - From row. ' || v_cod_step || ' - To row: ' || v_cod_step_new; END IF; o_return := v_return; END;```