Este guia detalha o processo de estabelecer uma conexão entre o MATLAB e um banco de dados Oracle, empregando o driver ODBC (Open Database Connectivity) para facilitar a comunicação.
Configuração do Ambiente do Banco de Dados Oracle
A primeira etapa envolve a preparação do seu ambiente Oracle. Se o seu banco de dados já estiver configurado e operacional, você pode pular para a seção de configuração do ODBC.
Criação de Usuário e Concessão de Permissões
Acesse o banco de dados Oracle via linha de comando (cmd) e execute os seguintes coamndos SQL para criar um novo usuário e atribuir as permissões necessárias:
-- Conecta como usuário sys
sqlplus sys as sysdba
-- Cria um novo usuário chamado 'user_matlab' com a senha 'senha_segura'
CREATE USER user_matlab IDENTIFIED BY senha_segura;
-- Concede as permissões de conexão e recursos ao novo usuário
GRANT CONNECT, RESOURCE TO user_matlab;
Criação e População de Tabelas de Exemplo
Para fins de demonstração e teste, crie tabelas e insira dados. Isso garante que o MATLAB tenha dados para consultar.
-- Criação da tabela 'Departamentos'
CREATE TABLE Departamentos (
id_departamento NUMBER(2) CONSTRAINT PK_DEPARTAMENTOS PRIMARY KEY,
nome_departamento VARCHAR2(14),
localizacao VARCHAR2(13)
);
-- Criação da tabela 'Funcionarios'
CREATE TABLE Funcionarios (
id_funcionario NUMBER(4) CONSTRAINT PK_FUNCIONARIOS PRIMARY KEY,
nome_funcionario VARCHAR2(10),
cargo VARCHAR2(9),
id_gerente NUMBER(4),
data_contratacao DATE,
salario NUMBER(7,2),
comissao NUMBER(7,2),
id_departamento NUMBER(2) CONSTRAINT FK_ID_DEPARTAMENTO REFERENCES Departamentos
);
-- Criação da tabela 'Bonus' (exemplo adicional)
CREATE TABLE Bonus (
nome VARCHAR2(10),
cargo VARCHAR2(9),
salario NUMBER,
comissao NUMBER
);
-- Criação da tabela 'FaixasSalarial'
CREATE TABLE FaixasSalarial (
faixa NUMBER,
salario_minimo NUMBER,
salario_maximo NUMBER
);
-- Inserção de dados de exemplo na tabela 'Departamentos'
INSERT INTO Departamentos VALUES (10,'FINANCEIRO','NOVA YORK');
INSERT INTO Departamentos VALUES (20,'PESQUISA','DALLAS');
INSERT INTO Departamentos VALUES (30,'VENDAS','CHICAGO');
INSERT INTO Departamentos VALUES (40,'OPERACOES','BOSTON');
-- Inserção de dados de exemplo na tabela 'Funcionarios'
INSERT INTO Funcionarios VALUES (7369,'SILVA','ANALISTA',7902,TO_DATE('17-12-1980','DD-MM-YYYY'),800,NULL,20);
INSERT INTO Funcionarios VALUES (7499,'SOUZA','VENDEDOR',7698,TO_DATE('20-02-1981','DD-MM-YYYY'),1600,300,30);
INSERT INTO Funcionarios VALUES (7521,'PEREIRA','VENDEDOR',7698,TO_DATE('22-02-1981','DD-MM-YYYY'),1250,500,30);
INSERT INTO Funcionarios VALUES (7566,'OLIVEIRA','GERENTE',7839,TO_DATE('02-04-1981','DD-MM-YYYY'),2975,NULL,20);
INSERT INTO Funcionarios VALUES (7654,'COSTA','VENDEDOR',7698,TO_DATE('28-09-1981','DD-MM-YYYY'),1250,1400,30);
INSERT INTO Funcionarios VALUES (7698,'RODRIGUES','GERENTE',7839,TO_DATE('01-05-1981','DD-MM-YYYY'),2850,NULL,30);
INSERT INTO Funcionarios VALUES (7782,'ALMEIDA','GERENTE',7839,TO_DATE('09-06-1981','DD-MM-YYYY'),2450,NULL,10);
INSERT INTO Funcionarios VALUES (7788,'FERREIRA','ANALISTA',7566,TO_DATE('19-04-1987','DD-MM-YYYY')-85,3000,NULL,20);
INSERT INTO Funcionarios VALUES (7839,'GOMES','PRESIDENTE',NULL,TO_DATE('17-11-1981','DD-MM-YYYY'),5000,NULL,10);
INSERT INTO Funcionarios VALUES (7844,'MARTINS','VENDEDOR',7698,TO_DATE('08-09-1981','DD-MM-YYYY'),1500,0,30);
INSERT INTO Funcionarios VALUES (7876,'RIBEIRO','ANALISTA',7788,TO_DATE('23-05-1987','DD-MM-YYYY')-51,1100,NULL,20);
INSERT INTO Funcionarios VALUES (7900,'ALVES','ANALISTA',7698,TO_DATE('03-12-1981','DD-MM-YYYY'),950,NULL,30);
INSERT INTO Funcionarios VALUES (7902,'BARROS','ANALISTA',7566,TO_DATE('03-12-1981','DD-MM-YYYY'),3000,NULL,20);
INSERT INTO Funcionarios VALUES (7934,'PINHEIRO','ANALISTA',7782,TO_DATE('23-01-1982','DD-MM-YYYY'),1300,NULL,10);
-- Inserção de dados de exemplo na tabela 'FaixasSalarial'
INSERT INTO FaixasSalarial VALUES (1,700,1200);
INSERT INTO FaixasSalarial VALUES (2,1201,1400);
INSERT INTO FaixasSalarial VALUES (3,1401,2000);
INSERT INTO FaixasSalarial VALUES (4,2001,3000);
INSERT INTO FaixasSalarial VALUES (5,3001,9999);
-- Confirmação das transações
COMMIT;
Configuração do Ambiente ODBC
O ODBC atua como uma ponte entre o MATLAB e o banco de dados Oracle. É necessário configurar um DSN (Data Source Name) no seu sistema.
- Abra o Painel de Controle e navegue até Ferramentas Adimnistrativas.
- Selecione "Fontes de Dados ODBC (64 bits)" (ou a versão correspondente ao seu sistema).
- Na aba "DSN do Sistema" (ou "DSN do Usuário", dependendo da sua preferência), clique em "Adicionar...".
- Escolha o driver Oracle apropriado na lista (pode ser necessário instalar o Oracle Instant Client com o driver ODBC).
- Configure os detalhes da conexão:
- Nome do DSN: Defina um nome descritivo para a sua conexão (ex:
Oracle_MATLAB_DSN). - Descrição: Opcional.
- Service Name: O nome do serviço do seu banco de dados Oracle (ex:
ORCL). - User ID: O nome de usuário criado anteriormente (ex:
user_matlab). - Password: A senha do usuário (ex:
senha_segura).
- Nome do DSN: Defina um nome descritivo para a sua conexão (ex:
- Clique em "Test Connection" para verificar se as credenciais e os detalhes do serviço estão corretos. Uma mensagem de sucesso indicará que a configuração está correta.
Execução de Código no MATLAB
Com o ambiente Oracle e o DSN do ODBC configurados, você pode agora escrever código MATLAB para interagir com o banco de dados.
% Limpa o workspace e o Command Window
clear;
clc;
% Define as credenciais e os detalhes da conexão
dbConfig = struct(...
'DataSourcename', 'Oracle_MATLAB_DSN', ... % Use o nome do DSN configurado
'User', 'user_matlab', ...
'Password', 'senha_segura');
% Estabelece a conexão com o banco de dados Oracle
try
conn = database(dbConfig.DataSourcename, dbConfig.User, dbConfig.Password);
% Verifica se a conexão foi bem-sucedida
if isopen(conn)
disp('Conexão com o banco de dados Oracle estabelecida com sucesso!');
% Executa uma consulta SQL para buscar dados da tabela 'Departamentos'
query = 'SELECT * FROM Departamentos';
cursor = exec(conn, query);
% Busca os dados retornados pela consulta
cursor = fetch(cursor);
% Exibe os dados recuperados
if ~isempty(cursor.Data)
disp('Dados da tabela Departamentos:');
disp(cursor.Data);
else
disp('Nenhum dado encontrado na tabela Departamentos.');
end
% Fecha o cursor
close(cursor);
else
disp('Falha ao estabelecer conexão com o banco de dados.');
end
% Fecha a conexão com o banco de dados
close(conn);
disp('Conexão com o banco de dados fechada.');
catch ME
disp(['Erro ao conectar ou interagir com o banco de dados: ', ME.message]);
end
Este script estabelece a conexão, executa uma conuslta SQL simples para recuperar todos os dados da tabela 'Departamentos', exibe os resultados e, em seguida, fecha a conexão.