3.4 KiB
3.4 KiB
ROWSORT_TIPI
Codice Sorgente
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;```