Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa tarde a todos!
Tenho uma dúvida em relação a um código PL/SQL no Oracle que precisei fazer para criar uma solução no meu sistema. O código está funcionando perfeitamente, e eu obtive o resultado que precisava. Porém, eu acredito que ele pode ser melhorado. Em síntese, ele realiza verificações em campos de uma tabela (não são todos os campos) para criar outra. Os campos sem valores não serão utilizados na tabela de destino. E por isso esta tabela de destino possuirá campos diferentes toda vez que o usuário executar esta função que estou criando. Eu postei abaixo um trecho do código em questão.
A variável VAUX é utilizada para criação da tabela. Como exemplo, no final da execução, ela será "CREATE TABLE TAB( CODIGOMOV NUMBER(6), HORAEXTRA NUMBER(12,2) )". A variável VSELECT é o que me auxilia, após a criação da tabela, na inserção dos dados que preciso. No final, ela será "INSERT INTO TAB VALUES SELECT CODIGOMOV, HORAEXTRA FROM MOVFOLHA". E a variável VTABSELECT, que é o resultado da minha função, é utilizada posteriormente para exibição dos dados na tela. Ela dá apelidos para os campos serem esteticamente melhores. Ela ficará "SELECT CODIGOMOV AS "Codigo", HORAEXTRA AS "Hora Extra" FROM TAB".
SELECT COUNT(*) INTO VCOUNT FROM MOVFOLHA
WHERE INICIO = VINICIO AND FIM = VFIM AND CODIGOEMPRESA = VEMPRESA AND HORAEXTRA IS NOT NULL;
IF VCOUNT > 0 THEN
VAUX := VAUX || ', HORAEXTRA NUMBER(12,2)';
VSELECT := VSELECT || ', HORAEXTRA';
VTABSELECT := VTABSELECT || ', HORAEXTRA AS "Hora Extra"';
END IF;
SELECT COUNT(*) INTO VCOUNT FROM MOVFOLHA
WHERE INICIO = VINICIO AND FIM = VFIM AND CODIGOEMPRESA = VEMPRESA AND INSALUBRIDADE IS NOT NULL;
IF VCOUNT > 0 THEN
VAUX := VAUX || ', INSALUBRIDADE NUMBER(12,2)';
VSELECT := VSELECT || ', INSALUBRIDADE';
VTABSELECT := VTABSELECT || ', INSALUBRIDADE AS "Insalubridade"';
END IF;
SELECT COUNT(*) INTO VCOUNT FROM MOVFOLHA
WHERE INICIO = VINICIO AND FIM = VFIM AND CODIGOEMPRESA = VEMPRESA AND COMISSOES IS NOT NULL;
IF VCOUNT > 0 THEN
VAUX := VAUX || ', COMISSOES NUMBER(12,2)';
VSELECT := VSELECT || ', COMISSOES';
VTABSELECT := VTABSELECT || ', COMISSOES AS "Comissoes"';
END IF;
SELECT COUNT(*) INTO VCOUNT FROM MOVFOLHA
WHERE INICIO = VINICIO AND FIM = VFIM AND CODIGOEMPRESA = VEMPRESA AND GRATIFICACAO IS NOT NULL;
IF VCOUNT > 0 THEN
VAUX := VAUX || ', GRATIFICACAO NUMBER(12,2)';
VSELECT := VSELECT || ', GRATIFICACAO';
VTABSELECT := VTABSELECT || ', GRATIFICACAO AS "Gratificacao"';
END IF;
Desde já agradeço a todos que me puderem ajudar!
Denilson Fernandes.
Carregando comentários...