Procedimento para contorno de erro de atualização
Identificamos uma ocorrência durante o processo de atualização de versão do sistema HCM, via ferramenta Gestão Cloud, para as versões 6.10.4.67 e 6.10.3.129, nos ambientes Aludra e Vega.
Erro apresentado
Ao realizar a atualização, está sendo exibida a seguinte mensagem de erro:
identifier 'DROPINDEX$SP' must be declared.
Instruções para contorno do erro
1 - Abra o CBDS HCM.
2 - Logue na Base HCM:
3 - Clique em Ferramentas > Script de personalização da base de dados:
4 - Após a abertura da nova janela, no campo Script de inicialização, clique em Inserir:
5 - Será aberta a tela Edição de comando...:
6 - No campo Comando SQL, insira o seguinte comando:
CREATE OR REPLACE EDITIONABLE PROCEDURE DROPINDEX$SP (
pindex_name IN VARCHAR2
) AS
idx INTEGER := 0;
idxid VARCHAR2(2000) := '';
sep VARCHAR2(3) := '';
curidxid VARCHAR2(2000);
index_name VARCHAR2(2000);
v_table_name VARCHAR2(2000);
BEGIN
/* Identificar a tabela associada ao índice*/
SELECT table_name
INTO v_table_name
FROM user_indexes
WHERE index_name = UPPER(pindex_name);
/* Construção da string de identificação do índice base*/
idxid := 'table: ' || v_table_name || ', expressions:[';
sep := '';
idx := 0;
FOR rec IN (
SELECT
b.column_name, b.descend
FROM user_ind_columns b
WHERE b.index_name = UPPER(pindex_name)
ORDER BY b.column_position
) LOOP
idxid := idxid ||
sep ||
TO_CHAR(idx, '09') || ' %' ||
rec.column_name || '% ' ||
rec.descend || ' ' ||
TO_CHAR(idx, '09');
sep := ', ';
idx := idx + 1;
END LOOP;
idxid := idxid || ']';
/* Comparação e remoção de índices duplicados*/
FOR rec IN (
SELECT index_name
FROM user_indexes
WHERE table_name = v_table_name
) LOOP
IF UPPER(pindex_name) <> rec.index_name THEN
sep := '';
curidxid := 'table: ' || v_table_name || ', expressions:[';
idx := 0;
FOR rec2 IN (
SELECT
b.index_name, b.column_name, b.descend, c.column_expression column_exp
FROM user_ind_columns b
LEFT JOIN user_ind_expressions c
ON b.table_name = c.table_name AND b.index_name = c.index_name AND b.column_position = c.column_position
WHERE b.table_name = v_table_name
AND b.index_name = rec.index_name
ORDER BY b.column_position
) LOOP
curidxid := curidxid ||
sep ||
TO_CHAR(idx, '09') || ' ' ||
CASE WHEN rec2.column_exp IS NULL THEN rec2.column_name ELSE rec2.column_exp END || ' ' ||
rec2.descend || ' ' ||
TO_CHAR(idx, '09');
sep := ', ';
index_name := rec2.index_name;
idx := idx + 1;
END LOOP;
curidxid := curidxid || ']';
IF curidxid = idxid THEN
EXECUTE IMMEDIATE 'DROP INDEX ' || index_name;
END IF;
END IF;
END LOOP;
/* Remover constraints UNIQUE associadas ao índice*/
FOR rec3 IN (
SELECT constraint_name, table_name
FROM user_constraints
WHERE index_name = UPPER(pindex_name)
AND constraint_type = 'U'
) LOOP
EXECUTE IMMEDIATE 'ALTER TABLE ' || rec3.table_name || ' DROP CONSTRAINT ' || rec3.constraint_name;
END LOOP;
/* Remover o índice principal*/
EXECUTE IMMEDIATE 'DROP INDEX ' || pindex_name;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Índice ' || pindex_name || ' não encontrado.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Erro: ' || SQLERRM);
END DROPINDEX$SP;
7 - Clique em OK.
8 - Após inserir o novo comando, deverá ser apresentado a seguinte tela:
9 - Clique em OK e rode a atualização normalmente.
Permanecemos à disposição para esclarecimentos.
IT Services
Senior Sistemas S.A.


English
Español


