SGBDs e suas linguagens internas

A linguagem SQL (Structured Query Language) segue o padrão ANSI (American National Standards Institute) e todos os SGBDs (Sistema de Gerenciamento de Banco de Dados) relacionais a utilizam para manipular os dados armazenados nos bancos de dados.
Além disso, ela é utilizada de maneira quase idêntica por todos os SGBDs, como o MySQL, Oracle, Postgresql, SQL Server, entre outros.
SQL é considerada uma linguagem declarativa e você não precisa ter conhecimentos em programação para utilizá-la. Mesmo sendo uma linguagem poderosa, ela possui limitações, como, por exemplo, não existir nativamente a opção de se trabalhar com fluxo de controle como o IF-ELSE ou a utilização de laços, tais como o FOR ou o WHILE.
Para utilizar estes recursos que normalmente são disponibilizados em linguagens de programação (Python, Java, Javascript, entre outras) os SGBDs criaram suas próprias linguagens internas, que são consideradas extensões da linguagem SQL.
Neste artigo, você irá conhecer e entender as linguagens internas de quatro SGBDs relacionais: MySQL, Oracle, Postgresql, SQL Server.
Vamos lá?
Oracle
O SGDB Oracle criou a sua própria linguagem interna em meados de 1989, a PL/SQL que significa Procedural Language/Structured Query Language.
A PL/SQL é uma linguagem estruturada em blocos de código e assim como a SQL, ela aceita diversos tipos de dados, como numéricos, strings, datas. Além disso, também é possível trabalhar com alguns outros recursos, como os cursores.
Um bloco PL/SQL é definido pelas palavras-chave DECLARE, BEGIN, EXCEPTION e END, que dividem o bloco em três seções:
DECLARE: Área de declaração de variáveis, constantes e outros elementos de código, que podem ser usados dentro desse bloco.
BEGIN: Instruções que são executadas quando o bloco é executado.
EXCEPTION: Área disponível para se trabalhar com quaisquer exceções que são geradas quando a seção com as instruções(BEGIN) é executada.
Sendo assim, para criar um bloco de código PL/SQL, apenas a seção executável é necessária:
BEGIN
instruções executáveis
END;
Estes blocos são considerados anônimos dentro da linguagem PL/SQL, pois não criamos nomes para eles. Porém, também existem os blocos de códigos nomeados, que são conhecidos também, como Functions e Procedures.
Nesse sentido, por exemplo, para criar uma procedure, podemos utilizar o seguinte código:
CREATE PROCEDURE nome_da_procedure
IS
Área de declaração das variáveis
BEGIN
instruções executáveis
END;
Já, por outro lado, para criar uma function, podemos utilizar o seguinte código:
CREATE FUNCTION nome_da_function
RETURN tipo de retorno da função
IS
Área de declaração das variáveis
BEGIN
instruções executáveis
RETURN retorno da função
END;
Portanto, diferentemente dos blocos anônimos, os nomeados são armazenados no banco de dados, e podem ser acessados em diversos momentos após a sua criação.

PostgreSQL
A PL/pgSQL ou SQL Procedural Language é a linguagem interna criada pelo postgreSQL, instalada por padrão a partir da sua versão 10. A PL/pgSQL é um módulo carregável, ou seja, o DBA pode optar por removê-la.
Assim como a PL/SQL do Oracle, a PL/pgSQL é uma linguagem estruturada em blocos, que aceita diversos tipos de dados, declarações de variáveis, atribuições, loops e condicionais.
Os blocos na linguagem PL/pgSQL possuem a seguinte estrutura básica:
DECLARE
Área de declaração das variáveis
BEGIN
instruções executáveis
END ;
Com a PL/pgSQL, também podemos criar blocos dentro de blocos:
DECLARE
Área de declaração das variáveis
BEGIN
DECLARE
Área de declaração das variáveis
BEGIN
instruções executáveis
END ;
END ;
Já para criar uma function com a linguagem PL/pgSQL, podemos utilizar o seguinte código:
CREATE FUNCTION nome_da_function(parametros)
RETURNS tipo de retorno da função
DECLARE
Área de declaração das variáveis
BEGIN
instruções executáveis
RETURN retorno da função
END;
LINGUAGEM plpgsql;
Por fim, a criação de uma procedure na linguagem PL/pgSQL é bem semelhante a uma function, a grande diferença é que as procedures não tem retorno:
CREATE PROCEDURE nome_da_procedure(parametros)
DECLARE
Área de declaração das variáveis
BEGIN
instruções executáveis
END;
SQL Server
O SGBD SQL Server, tem como linguagem interna a T-SQL(Transact-SQL), que é uma linguagem de consulta estruturada em transações dividida em lotes, que são coleções de uma ou mais instruções enviadas ao SQL Server.
A T-SQL suporta declaração de variáveis, processamento de cadeia de caracteres e dados, loops, condicionais e controle de transação.
Grande parte dos comandos T-SQL, são compatíveis com o padrão ANSI seguido pela linguagem SQL. Um programa em T-SQL, normalmente iniciará com uma instrução BEGIN e terminará com uma instrução END:
BEGIN
instruções executáveis
END;
Para identificar o final de um o lote o SQL Server Management Studio (SSMS) utilize a palavra GO.
CREATE NEW <view_name>
AS ...
GO
CREATE PROCEDURE <procedure_name>
AS ...
GO
Pensando em termos de sintaxe básica, temos que para criar uma function com T-SQL é necessário o seguinte passo:
CREATE FUNCTION nome_da_function(parametros)
RETURNS tipo de retorno da função
AS
BEGIN
instruções executáveis
RETURN retorno da função
END;
A sintaxe básica para criar uma procedure com T-SQL é:
CREATE PROCEDURE nome_da_procedure
AS
BEGIN
instruções executáveis
END;
MySQL
O SGDB MySQL que faz parte da empresa Oracle Corporation, não possui especificamente uma linguagem interna, apenas são chamadas de instruções CREATE PROCEDURE e CREATE FUNCTION.
Assim como em outros SGBDs, dentro dessas instruções, podemos trabalhar com diversos tipos de dados, declaração de variáveis, loops e condicionais.
Para criar uma function no SGBD MySQL, executamos o código abaixo:
CREATE FUNCTION nome_da_function(parametros)
RETURNS tipo de retorno da função
BEGIN
Área de declaração das variáveis
Instruções executáveis
instruções executáveis
RETURN retorno da função
END;
Para criar uma procedure no SGBD MySQL, precisamos executar o seguinte código:
DELIMITER $$
CREATE PROCEDURE nome_da_procedure(parametros)
BEGIN
Área de declaração das variáveis
Instruções executáveis
END $$
DELIMITER ;
Importante dizer que diferente dos outros SGBDs, a área de declaração de variáveis, tanto nas functions, como nas procedures, ficam dentro do bloco de instruções executáveis.
Conclusão
Como podemos estudar neste artigo, os SGBDs relacionais utilizam a linguagem SQL para manipular os dados armazenados nos bancos de dados. Porém, apesar de ser uma linguagem popular e muito importante, ela possui algumas limitações.
Para suprir esses limites, os SGBDs, implantaram internamente sua própria linguagem de consulta, mas diferente da linguagem SQL, não existe um padrão a se seguir. Mesmo que muitos SGDBs realizem a utilização de Functions, Procedures, Triggers e Views, cada um aplicou particularidades em suas linguagens.
Independente da sua realidade de trabalho ou campo de estudos, é muito importante conhecer um pouco sobre cada uma das linguagens apresentadas neste artigo.
Sendo assim, se você se interessou pelo assunto e gostaria de aprender um pouco mais sobre as linguagem interna de cada SGBD apresentada neste texto, indico as seguintes formações aqui da Alura, confira: