Pular para o conteúdo

Como usar as novidades da linguagem PL/SQL no Oracle 23c para desenvolver aplicações mais eficientes

Como usar as novidades da linguagem PL/SQL no Oracle 23c para desenvolver aplicações mais eficientes

O Oracle 23c é a versão mais recente do banco de dados Oracle, que oferece recursos avançados para o desenvolvimento de aplicações com microserviços, grafos, documentos e relacionais. Neste artigo, vamos explorar algumas das novidades da linguagem PL/SQL no Oracle 23c, que facilitam a escrita, a depuração e a integração de código PL/SQL com outras linguagens e tecnologias.

Transferência automática de PL/SQL para SQL

Uma das novidades mais interessantes do Oracle 23c é a transferência automática de PL/SQL para SQL, que permite converter código PL/SQL em código SQL equivalente, e vice-versa. Isso pode ser útil para otimizar o desempenho, simplificar a manutenção e aproveitar os recursos do SQL que não estão disponíveis no PL/SQL.

Para usar essa funcionalidade, basta usar a função PLSQL_TO_SQL ou SQL_TO_PLSQL, passando o código PL/SQL ou SQL como parâmetro. Por exemplo, suponha que temos a seguinte função PL/SQL que calcula o fatorial de um número:

CREATE OR REPLACE FUNCTION factorial (n NUMBER) RETURN NUMBER IS
  result NUMBER := 1;
BEGIN
  FOR i IN 1..n LOOP
    result := result * i;
  END LOOP;
  RETURN result;
END factorial;
/

Podemos converter essa função em uma expressão SQL usando a função PLSQL_TO_SQL, da seguinte forma:

SELECT PLSQL_TO_SQL('factorial(5)') FROM DUAL;

PLSQL_TO_SQL('FACTORIAL(5)')
--------------------------------------------------------------------------------
(SELECT EXP(SUM(LN(LEVEL))) FROM DUAL CONNECT BY LEVEL <= 5)

O resultado é uma expressão SQL que usa funções matemáticas e uma cláusula CONNECT BY para obter o mesmo resultado que a função PL/SQL. Podemos verificar isso executando as duas expressões:

SELECT factorial(5), (SELECT EXP(SUM(LN(LEVEL))) FROM DUAL CONNECT BY LEVEL <= 5) FROM DUAL;

FACTORIAL(5) (SELECTEXP(SUM(LN(LEVEL)))FROMDUALCONNECTBYLEVEL<=5)
------------ ----------------------------------------------------
         120                                                120

Da mesma forma, podemos converter uma expressão SQL em uma função PL/SQL usando a função SQL_TO_PLSQL, por exemplo:

SELECT SQL_TO_PLSQL('SELECT SYSDATE FROM DUAL') FROM DUAL;

SQL_TO_PLSQL('SELECTSYSDATEFROMDUAL')
--------------------------------------------------------------------------------
DECLARE
  v_result DATE;
BEGIN
  SELECT SYSDATE INTO v_result FROM DUAL;
END;
/

O resultado é um bloco PL/SQL anônimo que declara uma variável para armazenar o resultado da consulta SQL e usa a cláusula INTO para atribuir o valor à variável.

Essas funções podem ser usadas tanto em consultas quanto em stored procedures, e podem facilitar a migração e a integração de código entre as duas linguagens.

Tipo de dados Boolean

Outra novidade do Oracle 23c é o suporte ao tipo de dados Boolean, que segue o padrão ISO SQL e permite armazenar valores verdadeiros e falsos nas tabelas e usar expressões Booleanas nas instruções SQL. Esse tipo de dados padroniza o armazenamento de valores sim e não e facilita a migração para o banco de dados Oracle.

Para usar o tipo de dados Boolean, basta declarar uma coluna ou uma variável como Boolean, por exemplo:

CREATE TABLE employees (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(50),
  active BOOLEAN
);

DECLARE
  v_active BOOLEAN := TRUE;
BEGIN
  INSERT INTO employees (id, name, active) VALUES (1, 'Alice', v_active);
END;
/

Podemos consultar os valores Boolean usando as palavras-chave TRUEFALSE ou UNKNOWN, por exemplo:

SELECT * FROM employees WHERE active = TRUE;

        ID NAME                                               ACTIVE
---------- -------------------------------------------------- ------
         1 Alice                                              TRUE

Podemos também usar operadores lógicos como ANDOR e NOT para combinar expressões Booleanas, por exemplo:

SELECT * FROM employees WHERE active = TRUE AND name LIKE 'A%';

        ID NAME                                               ACTIVE
---------- -------------------------------------------------- ------
         1 Alice                                              TRUE

O tipo de dados Boolean também pode ser usado em funções e procedures PL/SQL, por exemplo:

CREATE OR REPLACE FUNCTION is_even (n NUMBER) RETURN BOOLEAN IS
BEGIN
  RETURN MOD(n, 2) = 0;
END is_even;
/

SELECT is_even(10) FROM DUAL;

IS_EVEN(10)
-----------
TRUE

O tipo de dados Boolean é compatível com outros tipos de dados, como numérico, caractere e data, e pode ser convertido usando as funções TO_BOOLEANTO_NUMBERTO_CHAR e TO_DATE, por exemplo:

SELECT TO_NUMBER(TRUE), TO_CHAR(FALSE), TO_DATE(TRUE) FROM DUAL;

TO_NUMBER(TRUE) TO_CHAR(FALSE) TO_DATE(TRUE)
--------------- ------------- -------------------
              1 FALSE         01-JAN-0001 00:00:00

Role DB_DEVELOPER_ROLE

O Oracle 23c inclui a nova role DB_DEVELOPER_ROLE, que fornece a um desenvolvedor de aplicações todos os privilégios necessários para projetar, implementar, depurar e implantar aplicações no banco de dados Oracle. Ao usar essa role, os administradores não precisam mais adivinhar quais privilégios podem ser necessários para o desenvolvimento de aplicações.

Para usar essa role, basta concedê-la a um usuário, por exemplo:

GRANT DB_DEVELOPER_ROLE TO scott;

O usuário scott poderá então criar e manipular objetos no seu próprio esquema, como tabelas, índices, visões, sequências, sinônimos, gatilhos, funções, procedures, pacotes e tipos. Além disso, o usuário poderá usar recursos avançados do banco de dados Oracle, como particionamento, compressão, criptografia, flashback, paralelismo, análise espacial e temporal, aprendizado de máquina e muito mais.

O papel DB_DEVELOPER_ROLE também permite ao usuário depurar o código PL/SQL usando o pacote DBMS_DEBUG ou ferramentas externas, como o SQL Developer. O usuário também pode executar consultas dinâmicas usando o pacote DBMS_SQL ou a instrução EXECUTE IMMEDIATE.

O papel DB_DEVELOPER_ROLE é uma forma simples e segura de conceder os privilégios necessários para o desenvolvimento de aplicações no banco de dados Oracle.

Stored Procedures em JavaScript

O módulo multilíngue (MLE) permite aos desenvolvedores invocar funções JavaScript armazenadas em módulos a partir do SQL e do PL/SQL. As especificações de chamada escritas em PL/SQL vinculam o JavaScript ao código PL/SQL. Esse recurso permite aos desenvolvedores usar funções JavaScript em qualquer lugar onde as funções PL/SQL são chamadas.

Para usar esse recurso, é preciso primeiro criar um módulo MLE usando a instrução CREATE MODULE, passando o código JavaScript como parâmetro. Por exemplo, suponha que temos a seguinte função JavaScript que calcula o fatorial de um número:

function factorial(n) {
  if (n == 0 || n == 1) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}

Podemos criar um módulo MLE com essa função usando a seguinte instrução:

CREATE MODULE factorial_module LANGUAGE JAVASCRIPT AS '
function factorial(n) {
  if (n == 0 || n == 1) {
    return 1;
  } else {
    return n * factorial(n - 1);
  }
}';

Em seguida, podemos criar uma especificação de chamada em PL/SQL para vincular a função JavaScript à função PL/SQL, usando a instrução CREATE FUNCTION, por exemplo:

CREATE FUNCTION factorial (n NUMBER) RETURN NUMBER AS LANGUAGE MLE NAME 'factorial_module.factorial(int)';

Agora podemos chamar a função PL/SQL que invoca a função JavaScript em qualquer lugar onde uma função PL/SQL pode ser chamada, por exemplo:

SELECT factorial(5) FROM DUAL;

FACTORIAL(5)
------------
         120

Esse recurso permite aos desenvolvedores aproveitar as funções JavaScript em qualquer lugar onde as funções PL/SQL podem ser chamadas. Esse recurso pode ser útil para integrar o código JavaScript existente com o banco de dados Oracle, ou para usar bibliotecas JavaScript que oferecem funcionalidades que não estão disponíveis no PL/SQL.

Além dessas novidades, o Oracle 23c também traz outras melhorias na linguagem PL/SQL, como:

  • Suporte a expressões regulares Perl-compatible (PCRE), que permitem usar sintaxes mais avançadas e poderosas para manipular strings usando as funções REGEXP_LIKEREGEXP_SUBSTRREGEXP_INSTR e REGEXP_REPLACE.
  • Suporte a expressões lambda, que permitem definir funções anônimas que podem ser passadas como parâmetros ou retornadas como valores, usando a sintaxe FUNCTION (parameters) RETURN type IS expression.
  • Suporte a tipos de dados JSON e XML, que permitem armazenar e manipular dados no formato JSON ou XML nas tabelas e nas variáveis PL/SQL, usando as funções JSON_VALUEJSON_QUERYJSON_TABLEXMLTYPEXMLQUERY e XMLTABLE.
  • Suporte a nested collections, que permitem criar coleções que contêm outras coleções como elementos, usando a sintaxe TYPE collection_type IS TABLE OF element_type.
  • Suporte a tipos de dados intervalo de tempo (TIME INTERVAL), que permitem armazenar e manipular intervalos de tempo entre duas datas ou horas, usando as funções NUMTODSINTERVALNUMTOYMINTERVALTO_DSINTERVAL e TO_YMINTERVAL.

Essas são algumas das novidades da linguagem PL/SQL no Oracle 23c, que tornam o desenvolvimento de aplicações mais fácil, rápido e eficiente.

Espero que você tenha gostado deste artigo e que tenha ficado curioso para experimentar esses recursos. Se você quiser saber mais sobre o Oracle 23c, você pode acessar o site oficial ou ler a documentação oficial. Obrigado pela sua atenção e até a próxima!

Abs

Fontes

Giovano Silva

Giovano Silva

Giovano Silva é um profissional com mais de 10 anos de experiência em tecnologias Oracle, com ênfase em PL/SQL. Ele adora escrever sobre soluções para problemas comuns enfrentados por profissionais Oracle em seu dia a dia. Seu objetivo é compartilhar conhecimento, simplificar conceitos complexos e ajudar a comunidade Oracle a crescer coletivamente.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress