IEC Banco de Dados I Aula 11 Técnicas de Programação SQL Turmas: Sistemas de Informação Professora: André Luiz da Costa Carvalho E- mail: andre@icomp.ufam.edu.br Site: hjp://bdufam.wordpress.com
Sumário Técnicas de programação SQL Embedded SQL, SQL dinâmico, e SQLJ Programando BD com funções: SQL/CLI e JDBC Stored Procedures e SQL/PSM Comparação
Programando com SQL Aplicações de Banco de Dados Linguagem hospedeira Java, C/C++/C#, PHP, etc Sublinguagem de Dados SQL Padrões SQL Evoluem constantemente Cada SGBD possui as suas variações
Técnicas e problemas Interface Interativa SQL direto em uma janela Arquivo de comandos @<filename> Aplicativos Transações enlatadas Web interface
Abordagens para Programar BDs Embutir comandos SQL em liguagens de programação Comandos são colocados na lata, usando um prefixo especial como EXEC SQL Precompilador ou preprocessador lê o código fonte Identifica comandos SQL e extrai-os para rodar no SGBD. Viram chamadas de função Chamados de embedded SQL
Abordagens para Programar BDs Biblioteca de acesso a Banco Biblioteca de funções disponíveis na linguagem. Application programming interface (API) Linguagens próprias Database programming language PL/SQL
Impedance Mismatch Diferenças entre o modelo de BD e da linguagem Binding (ligação) com cada linguagem específica Especifica para cada tipo de atributo no BD tipos compatíveis na linguagem. Cursor ou iterador Resultado de um Select é uma tabela Cursor ou iterador navegam pelo resultado
Interação típica em um programa que acessa um SGBD Abrir uma conexão com o servidor do BD. Interagir através da submissão de consultas, atualizações e outros comandos. Fechar a conexão
Embedded SQL, Dynamic SQL, e SQLJ Embedded SQL C SQLJ Java
Recuperando tuplas individuais com Embedded SQL EXEC SQL Prefixo Preprocessador separa os comandos SQL dos da linguagem hospedeira Finalizar com END-EXEC Ou ponto-e-vírgula (;) Variáveis compartilhadas Usadas tanto no programa em C quanto nos comandos SQL Prefixadas por dois pontos (:) nos comandos SQL
Embedded SQL: Exemplo
Recuperando tuplas individuais com Embedded SQL Conectando com o SGBD CONNECT TO <server name>as <connection name> AUTHORIZATION <user account name and password> ; Várias conexões, só uma ativa por vez Mudando de conexão SET CONNECTION <connection name> ; Finalizar DISCONNECT <connection name> ;
Recuperando tuplas individuais com Embedded SQL SQLCODE e SQLSTATE Variáveis de comunicação Usadas pelo SGBD para comunicar erros e exceções. SQLCODE 0 = sucesso 100 = nenhum registro sobrando no resultado < 0 = erro
Recuperando tuplas individuais com Embedded SQL SQLSTATE String de cinco caracteres 00000 = sem erro Outros valores representam vários tipos de erro e exceções Exemplo: 02000 indica no more data no SQLSTATE
Recuperando tuplas individuais com Embedded SQL
Recuperando múltiplas tuplas em Embedded SQL com cursores Cursor Ponteiro para uma túpla (linha) única do resultado de uma consulta OPEN CURSOR Pega o resultado da consulta e põe o cursor antes do primeiro resultado FETCH Move o cursor para o próximo resultado de uma consulta.
Recuperando múltiplas tuplas em Embedded SQL com cursores FOR UPDATE OF Lista o nome de atributos que serão modificados pelo programa Fetch orientado Adicionando palavras: NEXT, PRIOR, FIRST, LAST, ABSOLUTE i, e RELATIVE i
SQL Dinâmico SQL Dinâmico Executar consultas SQL dinamicamente em tempo de programa Dynamic update Dynamic query
SQLJ: Embedded SQL em Java Padrão para embedded SQL em Java Deve-se importar diversas bibliotecas para usar Default context Exceptions cuidam dos erros SQLException
SQLJ: Embedded SQL em Java
Recuperando múltiplas tuplas em SQLJ com iteradores Iterator Objeto associado a uma collecion (set ou multiset) de registros do resultado de uma consulta Named iterator Associado com uma resposta de consulta com uma lista de nomes de atributos e tipos de atributos Positional iterator Lista apenas tipos de atributos, pela ordem.
Recuperando múltiplas tuplas em SQLJ com iteradores
Pragramndo com DB por funções: SQL/CLI & JDBC Chamadas de função Abordagem Dinâmica para programação de Bancos de Dados Bibliotecas de funções Também conhecidas como application programming interface (API) Usadas para acessar o SGBD SQL Call Level Interface (SQL/CLI) Parte do padrão SQL
SQL/CLI: Usando C como linguagem Registro de Ambiente Coordena uma ou mais conexões Define informações do ambiente Registro de Conexão Guarda informações necessárias para uma conexão específica Registro de Comando Guarda informações necessárias para um comando SQL
SQL/CLI: Usando C como linguagem Registro de Descrição Guarda informações sobre tuplas ou parametros Handle para um registro Ponteiro que torna o registro acessível ao programa
JDBC: Funções SQL para programar em Java JDBC Um único programa java pode conectar com vários Bancos Chamados de fontes de dados Class.forName("oracle.jdbc.driver.OracleDriver") Carrega um JDBC driver explicitamente
JDBC: Funções SQL para programar em Java Objeto Connection Objeto Statement tem duas subclasses: PreparedStatement e CallableStatement Interrogação (?) Representa um parametro do comando Determinado em tempo de execução Objeto ResultSet Guarda o resultado da consulta
Stored Procedures e SQL/PSM Stored procedures Programas salvos no próprio SGBD Podem ser funções ou procedimentos SQL/PSM (SQL/Persistent Stored Modules) Extensões de SQL Incluem construtos de propósito geral em SQL
Stored Procedures e Functions Modulos persistentes Salvos no SGBD persistentemente Úteis para: Quando programa de banco é usado por várias aplicações. Reduzir transferência de dados e custos de comunicação. Aumentar poder de modelagem de visões.
Stored Procedures e Functions Declarando stored procedures: CREATE PROCEDURE <procedure name> (<parameters>) <local declarations> <procedure body> ; Ao declarar uma função, um tipo de retorno é necessário. CREATE FUNCTION <function name> (<parameters>) RETURNS <return type> <local declarations> <function body> ;
Stored Procedures e Functions Cada parâmetro tem: Tipo de Parâmetro: Um dos Opos padrões de SQL Modo do Parâmetro: IN, OUT, ou INOUT Chamando stored procedure: CALL <procedure or function name> (<argument list>) ;
SQL/PSM Comandos adicionais a SQL Condição: IF <condition> THEN <statement list> ELSEIF <condition> THEN <statement list>... ELSEIF <condition> THEN <statement list> ELSE <statement list> END IF ;
SQL/PSM Repetição
SQL/PSM
Comparando as três abordagens Embedded SQL Checagem da consulta para erros de sintaxe e esquema do BD feitos em tempo de compilação Em aplicações complexas onde consultas são geradas em tempo de execução pode não ser a melhor opção.
Comparando as três abordagens APIs Mais flexibilidade Programação mais complexa Sem checagem de sintaxe durante a compilação Programação no BD Não tem impedance mismatch Programadores tem que aprender uma linguagem nova