QuickSQL no Oracle APEX: Criando Esquemas de Banco de Dados de Forma Rápida e Eficiente

Introdução

Criar um modelo de banco de dados relacional pode ser um processo trabalhoso, exigindo a definição manual de tabelas, relacionamentos, índices e triggers. O QuickSQL, uma ferramenta integrada ao Oracle APEX, simplifica essa tarefa ao transformar uma especificação textual simples em um conjunto completo de comandos SQL.

Com mínimo esforço, é possível gerar scripts SQL para criar tabelas, views, triggers, índices e até mesmo dados de exemplo. Embora não substitua uma modelagem formal de dados, o QuickSQL é uma maneira rápida e eficiente de gerar um modelo inicial que pode ser refinado conforme necessário.


Casos de Uso do QuickSQL

O QuickSQL é útil em diversas situações, como:

  1. Criação rápida de modelos de dados – Ideal para prototipagem e desenvolvimento ágil.

  2. Reutilização de modelos – Permite salvar e reutilizar estruturas para futuras adaptações.

  3. Geração de dados fictícios – Útil para testes e demonstrações.

  4. Aprendizado de SQL – Facilita o entendimento da sintaxe SQL através de exemplos práticos.


Como Acessar o QuickSQL no Oracle APEX

Para começar a usar o QuickSQL, siga estes passos:

  1. Acesse o Oracle APEX.

  2. Vá até SQL WorkshopQuickSQL.

  3. No editor do QuickSQL, insira a estrutura do seu banco de dados usando uma sintaxe simplificada.

  4. O SQL é gerado automaticamente na aba lateral.

  5. Clique em Review and Run para executar os scripts e criar os objetos no banco de dados.

Se desejar, você pode salvar o modelo para reutilização futura ou baixar os scripts gerados para refinamento posterior.


Sintaxe do QuickSQL

O QuickSQL usa uma notação baseada em texto simples. Basta declarar os nomes das tabelas e listar suas colunas com indentação. O sistema infere os tipos de dados automaticamente e gera as primary keys por padrão.

Exemplo básico

customers  
    id /pk  
    name vc100 not null  
    email unique  
    created_at timestamp default sysdate  

orders  
    id /pk  
    customer_id /fk customers  
    order_date date default sysdate  
    total number(10,2)

Esse pequeno bloco de código gera:

✔ Tabelas customers e orders.
✔ Chave primária automática para id.
✔ Chave estrangeira customer_id referenciando customers.
email como uma coluna única.
created_at e order_date com valores padrão.


Tipos de Dados no QuickSQL

O QuickSQL reconhece uma série de tipos de dados que podem ser especificados diretamente na definição das colunas. Caso o tipo não seja informado, ele tenta deduzir automaticamente com base no nome da coluna.

AliasTipo SQL GeradoDescrição
num, numberNUMBERNúmero genérico de precisão variável.
int, integerINTEGERNúmero inteiro.
d, dateDATEData sem informação de horário.
ts, timestampTIMESTAMPData e hora sem fuso horário.
tstz, tswtz, timestamp with local time zoneTIMESTAMP WITH LOCAL TIME ZONEData e hora com fuso horário.
char, vc, varchar, varchar2, stringVARCHAR2(4000)Texto de até 4000 caracteres.
vcNNNVARCHAR2(NNN)Define um tamanho específico de VARCHAR2, onde NNN varia de 1 a 32.767.
vc(NNN)VARCHAR2(NNN)Alternativa ao formato vcNNN.
vc32kVARCHAR2(32.767)Texto de até 32.767 caracteres (somente para Oracle 12c+).
clobCLOBArmazena grandes quantidades de texto.
blobBLOBArmazena dados binários, como imagens e arquivos.
jsonCLOB CHECK (<Column Name> IS JSON)Define um campo CLOB com validação JSON.
fileBLOB + MetadataCria uma coluna BLOB com colunas adicionais _FILENAME, _CHARSET, _MIMETYPE e _LASTUPD para manipulação de arquivos.

Exemplo Prático

documents  
    id /pk 
    title vc255 not null  
    content clob  
    created_at timestamp default sysdate  
    file_attachment file

Esse exemplo cria uma tabela documents com:
✅ Um campo CLOB para armazenar textos extensos.
✅ Um campo BLOB para anexar arquivos, com colunas auxiliares para manipulação.
✅ Um TIMESTAMP com data de criação padrão.


Diretivas de Tabela no QuickSQL

O QuickSQL permite adicionar funcionalidades extras às tabelas utilizando diretivas especiais. Essas diretivas são prefixadas por / e podem ser usadas para ativar APIs, auditoria, compressão de dados, geração automática de registros e muito mais.

DiretivaDescriçãoExemplo
/apiGera automaticamente um pacote PL/SQL para manipulação dos dados (insert, update, delete, query)./api
/auditHabilita auditoria do Oracle para registrar todas as operações na tabela./audit
/auditcols, /audit cols, /audit columnsAdiciona colunas created, created_by, updated, updated_by e cria um trigger para preencher automaticamente./auditcols
/colprefix <prefixo>Adiciona um prefixo a todas as colunas da tabela./colprefix usr_
/compress, /compressedAtiva a compactação dos dados para economizar espaço./compress
/insert NNInsere NN linhas de dados de exemplo (máximo de 1000)./insert 20
/restHabilita acesso Auto-REST via ORDS (Oracle REST Data Services)./rest
/unique <colunas>Define uma restrição UNIQUE para as colunas informadas./unique state, city

Exemplo Prático

users  /api /auditcols /insert 10 /rest
    id /pk
    name vc100 not null  
    email vc200 not null unique  
    created_at timestamp default sysdate

Neste exemplo, além das colunas normais, o QuickSQL irá:
✅ Criar um pacote PL/SQL para manipular a tabela (/api).
✅ Adicionar colunas de auditoria (created, created_by, updated, updated_by) e um trigger para preenchê-las (/auditcols).
Inserir 10 registros de exemplo automaticamente (/insert 10).
✅ Ativar acesso REST à tabela via ORDS (/rest).

Com essas diretivas, é possível gerar tabelas preparadas para auditoria, APIs REST e até mesmo incluir dados de teste.


Definição de Relacionamentos e Constraints

Para definir relações entre tabelas, basta indentar a tabela filha abaixo da tabela pai ou usar a diretiva /fk.

Exemplo com chaves estrangeiras

departments  
    id /pk  
    name vc100  

employees  
    id /pk 
    name vc100 not null  
    department_id number /fk departments

Diretivas de Colunas no QuickSQL

Além das Diretivas de Tabela, o QuickSQL permite especificar diretivas de colunas para personalizar comportamentos, como criação de índices, valores padrão, constraints e até mesmo formatação automática dos dados.

DiretivaDescriçãoExemplo
/idx, /index, /indexedCria um índice na coluna para melhorar a performance de busca.email vc200 /index
/uniqueDefine uma constraint UNIQUE, impedindo valores duplicados.email vc200 /unique
/cascadeAtiva deleção em cascata quando a linha pai for excluída.order_id int /fk orders /cascade
/check <valores>Restringe valores aceitos a uma lista específica.status vc10 /check Open, Closed, Pending
/constant <valor>Usa um valor fixo ao gerar dados de exemplo.city vc50 /constant NYC
/default <valor>Define um valor padrão se o campo for nulo ou omitido.created_at timestamp /default sysdate
/values <lista>Define uma lista de valores sugeridos para geração de dados.size vc10 /values Small, Medium, Large
/upperConverte valores para maiúsculas automaticamente.state vc2 /upper
/lowerConverte valores para minúsculas automaticamente.email vc200 /lower
/nn, /not nullAdiciona a constraint NOT NULL, tornando o campo obrigatório.name vc100 /not null
/between <min> and <max>Restringe valores a um intervalo numérico.age int /between 18 and 65
/hidden, /invisibleOculta a coluna em SELECT *.internal_notes clob /hidden
/references, /reference, /fk <tabela>Cria uma chave estrangeira apontando para outra tabela.customer_id int /fk customers
/pkDefine a chave primária explicitamente.uuid varchar2(36) /pk
-- Comentário ou [ Comentário ]Adiciona comentários ao modelo QuickSQL.[Este campo armazena o status do pedido]

📌 Se nenhuma coluna estiver com a diretiva /pk, um campo id será automaticamente criado na tabela como chave primária.


Exemplo Prático

orders  
    id /pk  
    customer_id int /fk customers
    order_date date /default sysdate  
    status vc20 /check Pending, Shipped, Delivered, Cancelled  
    total_amount number /nn

O que esse modelo faz?
customer_id cria uma chave estrangeira referenciando customers.
order_date assume o valor padrão sysdate se não for informado.
status só pode ter valores Pending, Shipped, Delivered ou Cancelled (/check).
total_amount não pode ser nulo (/nn).

Com essas diretivas, é possível criar tabelas robustas com menos esforço.


Criando Views com QuickSQL

Além da criação rápida de tabelas e relacionamentos, o QuickSQL permite gerar Views automaticamente. As Views são úteis para consolidar dados de múltiplas tabelas e facilitar consultas complexas.

Sintaxe

view [view_name] [table_name] [table_name] ...

Regras importantes:

  • O nome da View não pode conter espaços.

  • Os nomes das tabelas referenciadas também não podem conter espaços.

  • As tabelas devem ser separadas por um espaço ou vírgula.


Exemplo Prático

Modelo QuickSQL

dept  
    dname  
    loc  
    emp  
        ename  
        job  

view dept_emp emp dept

SQL Gerado

create or replace view dept_emp as
select
    emp.id        emp_id,
    emp.ename     ename,
    emp.job       job,
    dept.id       dept_id,
    dept.dname    dname,
    dept.loc      loc
from
    emp,
    dept
where
    emp.dept_id(+) = dept.id

Explicação

✅ A View dept_emp foi criada para consolidar dados das tabelas emp (funcionários) e dept (departamentos).
✅ A estrutura define ename e job da tabela emp, e dname e loc da tabela dept.
✅ O QuickSQL gera a SQL automaticamente, permitindo que você foque na modelagem dos dados.


Geração Automática de Triggers, Sequências e PL/SQL

Além das tabelas, o QuickSQL pode gerar automaticamente:

Triggers → Para preencher automaticamente chaves primárias baseadas em sequência.
Sequências → Para auto incremento de IDs.
PL/SQL API → Pacotes com procedimentos para INSERT, UPDATE, DELETE e SELECT.

Exemplo com PL/SQL API ativada

Ao gerar o SQL no QuickSQL, a opção Generate PL/SQL API cria automaticamente um pacote PL/SQL com operações CRUD para cada tabela.


Como Configurar os Settings no QuickSQL?

1️⃣ Abra o QuickSQL dentro do Oracle APEX.
2️⃣ Clique no botão "Settings" localizado na interface do QuickSQL.
3️⃣ Configure as opções desejadas, como:

  • object_prefix: Define um prefixo para todos os objetos criados, garantindo uma organização consistente.

  • schema: Especifica o esquema onde os objetos serão criados.

  • primary key strategy: Define o tipo de chave primária (identity, sequence, SYS_GUID, etc.).

  • audit columns: Adiciona colunas de auditoria automaticamente.

4️⃣ Salve as configurações e veja a geração do SQL sendo ajustada automaticamente.

Exemplo: Usando object_prefix

Se você deseja que todas as tabelas geradas tenham um prefixo "HR_" para identificar que pertencem ao módulo de Recursos Humanos, basta configurar:

No diálogo "Settings", defina:

  • object_prefix: HR_

  • schema: corporate

Isso garantirá que tabelas como EMPLOYEES e DEPARTMENTS sejam criadas como HR_EMPLOYEES e HR_DEPARTMENTS, mantendo um padrão organizacional no banco de dados.

Ao aplicar essas configurações pela interface, o SQL gerado já refletirá essas definições sem precisar alterar manualmente o código.


Visualizar o Diagrama do Modelo

É possível visualizar o diagrama do modelo que criado apenas clicando no botão “Diagram". Isso facilita a validação do modelo que está sendo criado.


Criando os Objetos no Banco de Dados

Após definir o modelo no QuickSQL, siga estes passos para executar os scripts:

  1. Clique em Save Model para salvar a especificação do QuickSQL.

  2. Clique em Save SQL Script para armazenar o SQL gerado.

  3. Clique em Review and Run para revisar e executar os comandos no banco.

  4. Após a execução, verifique possíveis erros e ajuste se necessário.

  5. Opcionalmente, clique em Create App from Script para gerar uma aplicação APEX baseada nas tabelas criadas.


Conclusão

O QuickSQL é uma ferramenta essencial para desenvolvedores Oracle APEX, permitindo criar modelos de banco de dados com velocidade e eficiência. Com sua sintaxe simples, ele automatiza a criação de tabelas, relacionamentos e até APIs PL/SQL, otimizando o processo de desenvolvimento.

Se você ainda não experimentou o QuickSQL, teste no seu ambiente APEX e descubra como ele pode transformar sua modelagem de dados!