Como criar função definida pelo usuário do PostGresql

Como criar função definida pelo usuário do PostGresql
“Quando requer executar muitas instruções SQL várias vezes, é melhor escrever uma função ou procedimento definido pelo usuário com essas instruções SQL. Ele remove o código duplicado e reutiliza o código chamando a função de diferentes aplicativos. A maneira de criar e usar diferentes tipos de funções definidas pelo usuário do PostGresql foi mostrada neste tutorial.”

Sintaxe

A sintaxe da função PostgreSQL é dada abaixo.

Crie ou substitua a função function_name (argument_list)
Retorna return_type como $ variable_name $
DECLARAR
declaração;
[…]
COMEÇAR

[…]
Return variable_name | valor
FIM;
Idioma PLPGSQL;
  • Criar palavras-chave é usado para criar uma nova função definida pelo usuário e a palavra-chave substitua é usada para modificar a função existente.
  • O nome da função é definido pelo Function_Name, e a função pode levar um ou mais argumentos. Três tipos de argumentos podem ser usados ​​na função. Estes são EM, FORA, e INout. O argumento padrão da função é EM argumento. É usado para passar o valor para a função e não pode ser alterado dentro da função. O FORA O argumento é usado para retornar o valor da função. O INout O argumento pode ser usado para passar o valor para a função e retornar o valor da função. Pode ser transferido dentro da função como o fora argumento.
  • O tipo de dados da variável que será retornado pela função é mencionado após a palavra -chave de retorno.
  • O corpo da função começará com a palavra -chave declarar, onde as variáveis ​​necessárias serão declaradas. Em seguida, as declarações SQL necessárias serão definidas dentro dos blocos iniciais e finais.
  • O nome da linguagem processual é definido após a palavra -chave do idioma na qual a função será executada.

Pré-requisitos

A. Instale o PostGresql

Você deve instalar a versão mais recente dos pacotes PostGresql no sistema operacional Linux antes de executar as instruções SQL mostradas neste tutorial. Execute os seguintes comandos para instalar e iniciar o PostgreSQL:

$ sudo apt-get -y install postgresql postgresql-contra
$ sudo SystemCtl Iniciar PostgreSQL.serviço

Execute o seguinte comando para fazer login no PostgreSQL com privilégio de root.

$ sudo -u postgres psql

B. Você pode criar um banco de dados nomeado “Testdb” executando a seguinte instrução SQL.

# Criar banco de dados TestDB;

Se você quiser criar uma tabela para o testdb banco de dados, então você tem que digitar "\ C" Para alterar o banco de dados. Mas neste tutorial, eu não mudei o banco de dados e a tabela, e todas as funções foram criadas no banco de dados padrão nomeado PostGres.

C. Crie uma tabela denominada produtos com quatro campos e insira quatro registros na tabela para testar as funções definidas pelo usuário que serão criadas posteriormente neste tutorial.

# Criar produtos de tabela (
Id Id Serial Primary Key,
Nome Varchar (30),
Tipo Varchar (20),
dinheiro de preço);

D. Insira quatro registros na tabela.

# Inserir em produtos (nome, tipo, preço)
Valores ('Samsung A40', 'Mobile', 300),
('A4', 'Mouse', 20),
('Sony 42 ”', 'TV', 1000),
('Samsung 3TB', 'HDD', 600);

Exemplos diferentes de funções definidas pelo usuário do PostGresql

Os usos de funções definidos pelo usuário com argumento e sem argumento no PostgreSQL foram mostrados abaixo usando vários exemplos.

Exemplo 1: Função definida pelo usuário sem argumento e valor de retorno

Execute a seguinte instrução SQL para criar uma função nomeada function1 () sem nenhum argumento, e a função não retornará nada. A função atualizará o registro da tabela de produtos em que o valor de identificação é 3 após a execução.

# Criar ou substituir a função da função1 ()
Retorna nulo como
$$
COMEÇAR
--Atualize o valor do preço do terceiro registro
Atualizar produtos Definir preço = 1500 onde id = 3;
FIM;
$$
Idioma 'PLPGSQL';

A saída a seguir aparecerá se a função for criada com sucesso no PostGres base de dados.

Execute a seguinte declaração SQL para ler todos os registros do produtos tabela antes de executar function1 ().

# Selecione * FROM PRODUTOS;

A saída a seguir mostra os registros inseridos do produtos mesa.

Execute a seguinte instrução SQL para executar a função.

# Selecione function1 ();


A saída a seguir mostra que uma linha é afetada chamando a função function1 (). O valor do campo de preços da tabela será atualizado onde o valor de identificação é 3.

Execute a seguinte declaração SQL para ler todos os registros do produtos tabela após executar function1 ().

# Selecione * FROM PRODUTOS;

A saída a seguir mostra que o valor do preço da tabela de produtos foi atualizado onde o valor do ID é 3 e agora é 1500.

Exemplo-2: Função definida pelo usuário com argumento

O argumento padrão da função está em argumento. Execute a seguinte instrução SQL para criar uma função nomeada function2 () com dois argumentos, e a função não retornará nada. A função inserirá um novo recorde para o produtos tabela com os valores do argumento.

# Criar ou substituir a função da função2 (nome Varchar, tipo Varchar, Price Int)
Retorna nulo como
$$
COMEÇAR
--Insira um novo recorde
Insira em produtos (nome, tipo, preço)
Valores (nome, tipo, preço);
FIM;
$$
Idioma 'PLPGSQL';


A saída a seguir aparecerá se a função for criada com sucesso no PostGres base de dados.

Execute a seguinte instrução SQL para executar a função três em valores de argumento. Estes são "iPhone", "Mobile" e 2000.

# Select Function2 ('iPhone', 'Mobile', 2000);

A saída a seguir mostra que uma linha é afetada chamando a função function2 (), e um novo registro será inserido na tabela.

Execute a seguinte declaração SQL para ler todos os registros do produtos tabela após executar function2 ().

# Selecione * FROM PRODUTOS;

A saída a seguir mostra que um novo registro foi inserido no produtos mesa.

Exemplo 3: Função definida pelo usuário sem argumento

O argumento de saída é usado para retornar o valor da função. Execute a seguinte instrução SQL para criar uma função nomeada function3 () com um argumento fora do tipo de dinheiro, e a função retornará dados do tipo de dinheiro. A função retornará o valor atribuído do argumento.

# Crie ou substitua a função da função3 (preço de preço)
Retorna dinheiro como
$$
COMEÇAR
--Atribuir um valor ao argumento
Preço: = 1000;
FIM;
$$
Idioma 'PLPGSQL';


A saída a seguir aparecerá se a função for criada com sucesso no PostGres base de dados.

Execute a seguinte instrução SQL para excluir registros da tabela de produtos com base no valor retornado pela função3 ().

# Exclua dos produtos onde o preço <= function3();


A saída a seguir mostra que três linhas são afetadas chamando a função function3 (). O valor retornado da função é 1000, que corresponde aos três registros do produtos Tabela onde o eu ia Os valores são 1, 2, e 4.

Execute a seguinte declaração SQL para ler todos os registros do produtos tabela após executar function3 (). A saída mostra que existem dois registros na tabela onde o preço Os valores são mais de 1000.

# Selecione * FROM PRODUTOS;

A saída a seguir mostra que 3 registros foram excluídos do produtos mesa.

Exemplo-4: Função definida pelo usuário com argumento de entrada

O argumento de entrada é usado na função para transmitir valores para a função e retornar valores da função. Execute a seguinte instrução SQL para criar uma função nomeada calcular() com um argumento de entrada do tipo de flutuação e um argumento do tipo inteiro. A função retornará dados do tipo de flutuação. A função será executada com o valor das vendas, que será um valor de flutuação, e o desconto, que será um número inteiro. O valor das vendas após o desconto será calculado com base nos valores do argumento no argumento. Em seguida, o valor das vendas calculado será retornado da função usando o argumento de saída.

# Criar ou substituir a função Calcular (
Sales_amount Inout Float, desconto int)
Retorna flutuar como
$$
COMEÇAR
--Calcule o valor do desconto
sales_amount: = sales_amount - (sales_amount*desconto/100);
FIM;
$$
Idioma 'PLPGSQL';

A saída a seguir aparecerá se a função for criada com sucesso no PostGres base de dados.

Execute a seguinte declaração para executar a função com 10000 como o valor das vendas e 5 como o valor do desconto

#Select Calcule (10000, 5) como desconto_amount;

O 5% de 10000 é 500 e 10000-500 = 9500. A saída a seguir mostra o valor das vendas após um desconto de 5%.

Exemplo 5: Usuário-Definado Função com o Afirmação condicional

Execute a seguinte instrução SQL para criar uma função nomeada Search_Product () com um argumento, e a função retornará os dados do tipo Varchar. A maneira de declarar a variável de função e usar a declaração condicional foi demonstrada nesta função. A variável de função nomeada Nome do Produto foi definido com o Nome tipo de produtos mesa. O valor do argumento, tp, será correspondido com o valor do tipo campo do produtos mesa. Se nenhuma correspondência for encontrada na tabela, será levantada um erro com a mensagem: “O tipo de produto não existe”. Se alguma correspondência for encontrada, o valor do Nome O campo desse tipo de produto será armazenado na variável de função e a variável será retornada da função.

# Crie ou substitua a função search_product (tp varchar)
Retorna Varchar como
$$
DECLARAR
Product_name Products.Nome%tipo;
COMEÇAR
-- Pesquise o nome do produto com base no tipo
Selecione o nome em product_name
De produtos
Onde produtos.Tipo = tp;
Se não for encontrado, então
levantar 'o tipo de produto não existe.';
FIM SE;
Return product_name;
FIM;
$$
Idioma 'PLPGSQL';

A saída a seguir aparecerá se a função for criada com sucesso no PostGres base de dados.

Execute a seguinte instrução SQL para ler todos os registros da tabela de produtos.

# Selecione * FROM PRODUTOS;

Execute a seguinte instrução SQL para executar a função search_product () com o tipo de produto “Móvel”.

# Selecione Search_Product ('Mobile');

Execute a seguinte instrução SQL para executar a função search_product () com o tipo de produto “AC”.

# Selecione Search_Product ('AC');

A saída a seguir mostra que o produtos A tabela contém dois registros de valores de tipo, “televisão" e "Móvel”. A saída da primeira execução da função retornou "iphon" porque o tipo de produto "móvel" existe na tabela. A saída da segunda execução da função retornou uma mensagem de erro porque o tipo de produto “AC” não existe na tabela.

Exemplo 6: Função definida pelo usuário com função agregada

Qualquer função agregada suportada pelo SQL pode ser usada na função PostGresql. Execute a seguinte instrução SQL para criar uma função nomeada count_product () sem nenhum argumento, e a função retornará os dados do tipo inteiro. A função agregada count () foi usada na função usada para contar o número de linhas com base na condição específica. Aqui, uma variável de função chamada total_product foi declarada na função de armazenar o valor de retorno da função count (). A função count () foi usada na consulta selecionada para contar os registros em que o nome do produto começa com a palavra "Sony".

# Crie ou substitua a função count_product ()
Retorna int as
$$
DECLARAR
total_product int;
COMEÇAR
--Conte o número total do produto específico
Selecione a contagem (*) em total_product dos produtos
Onde nome como 'Sony%';
Return total_product;
FIM;
$$
Idioma PLPGSQL;

A saída a seguir aparecerá se a função for criada com sucesso no PostGres base de dados.

Execute o seguinte comando para executar a função, count_product ().

# Selecione count_product ();

A saída a seguir mostra que a função count () retorna o valor 1 porque há apenas um registro que corresponde ao valor, "Sony".

Conclusão

O objetivo de usar as funções PostgreSQL e diferentes maneiras de usar as funções PostgreSQL com argumentos em, out e inout foram descritos neste tutorial, criando várias funções PostGresql. O argumento no argumento é usado para assumir o valor da função. O argumento de saída é usado para retornar o valor da função. O argumento de entrada é usado para levar o valor de entrada na função e retornar a saída da função. A função pode ser criada sem nenhum argumento também. Espero que o usuário possa criar e usar a função PostgreSQL corretamente depois de ler este tutorial.