Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ GaussDB(DWS)/ Perguntas frequentes/ Uso do banco de dados/ Como usar uma função definida pelo usuário para reescrever a função CRC32()?
Atualizado em 2024-05-09 GMT+08:00

Como usar uma função definida pelo usuário para reescrever a função CRC32()?

Atualmente, o GaussDB(DWS) não tem uma função CRC32() embutida. Em vez disso, você pode usar a função definida pelo usuário de GaussDB(DWS) para reescrever a função CRC32().

  • CRC32(expr)
  • Descrição: calcula a redundância cíclica. O parâmetro de entrada expr é uma cadeia. Se o parâmetro for NULL, NULL é retornado. Caso contrário, um valor não assinado de 32 bits é retornado após o cálculo de redundância.

Exemplo de reescrever a função CRC32() usando a declaração de função definida pelo usuário de GaussDB(DWS):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
CREATE OR REPLACE FUNCTION crc32(text_string text) RETURNS bigint AS $$
DECLARE
    val bigint;
    i int;
    j int;
    byte_length int;
    binary_string bytea;
BEGIN
    IF text_string is null THEN
        RETURN null;
    ELSIF text_string = '' THEN
        RETURN 0;
    END IF;

    i = 0;
    val = 4294967295;
    byte_length = bit_length(text_string) / 8;
    binary_string = decode(replace(text_string, E'\\', E'\\\\'), 'escape');
    LOOP
        val = (val # get_byte(binary_string, i))::bigint;
        i = i + 1;
        j = 0;
        LOOP
            val = ((val >> 1) # (3988292384 * (val & 1)))::bigint;
            j = j + 1;
            IF j >= 8 THEN
                EXIT;
            END IF;
        END LOOP;
        IF i >= byte_length THEN
            EXIT;
        END IF;
    END LOOP;
    RETURN (val # 4294967295);
END
$$ IMMUTABLE LANGUAGE plpgsql;

Verifique o resultado da reescrita.

1
2
3
4
5
select crc32(null),crc32(''),crc32('1');
 crc32 | crc32 |   crc32
-------+-------+------------
       |     0 | 2212294583
(1 row)

Para obter detalhes sobre como usar funções definidas pelo usuário, consulte CREATE FUNCTION.