http:// sqlj: uma alternativa de alto nível a jdbc universidade federal de campina grande...

57
http://www.lsi.dsc.ufcg.edu.br/ SQLJ SQLJ : uma alternativa de : uma alternativa de alto nível a JDBC alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor: Cláudio de Souza Baptista Estagiário: Elvis Rodrigues da Silva

Upload: internet

Post on 17-Apr-2015

105 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

http://www.lsi.dsc.ufcg.edu.br/

SQLJSQLJ: uma alternativa de alto : uma alternativa de alto nível a JDBCnível a JDBC

Universidade Federal de Campina GrandeDisciplina: Banco de Dados I

Professor: Cláudio de Souza BaptistaEstagiário: Elvis Rodrigues da Silva

Page 2: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

RoteiroRoteiro

• Introdução• Sintaxe Inicial• Comandos avançados• Requisitos• Referências

Page 3: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

IntroduçãoIntrodução (1 de 5) (1 de 5)

• SQLJ é uma tecnologia que permite a um programa Java acessar um banco de dados utilizando statements SQL embutidos

• Arquivo fonte termina com “.sqlj”• Manipulações SQLJ

– Meta informações: Create, Alter, Drop– Dados: Select, Insert, Update, Open, Fetch– Controle de Transações: Commit, Rollback

Page 4: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Introdução (2 de 5)Introdução (2 de 5)

• SQLJ não pode ser compilado diretamente pelo compilador Java

• Solução: usar um tradutor– SQLJ Translator

Page 5: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Introdução (3 de 5)Introdução (3 de 5)

• O tradutor verifica erros de sintaxe e semânticos na instrução SQL em tempo de tradução:– Nomes incorretos– Checagem de tipos– Verifica se o comando SQL está de acordo

com o Banco de Dados– Etc.

Page 6: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Introdução (4 de 5)Introdução (4 de 5)

• A IDE Oracle JDeveloper reconhece a sintaxe de SQLJ para o banco de dados Oracle, mas é possível utilizar outros compiladores

• O IBM Websphere também possui compatibilidade com SQLJ para o banco de dados IBM DB2

Page 7: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Introdução (5 de 5)Introdução (5 de 5)

• Vantagens de SQLJ sobre JDBC (comandos estáticos)– Código-fonte reduzido– Checagem de tipos SQL via conexão– Associação de variáveis em um único

comando– Checagem de tipos de parâmetros e retorno

antes da execução

• Desvantagens– Um passo a mais no processamento:

tradução de sqlj para java

Page 8: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: DeclaraçõesDeclarações (1 de 3)(1 de 3)

• Declarações SQLJ :– #sql{<comando SQL>};

• Regras pra declarações SQLJ

SQLJ declaration; // OK (top level scope)class Outer { SQLJ declaration; // OK (class level scope)

class Inner { SQLJ declaration; // OK (nested class scope)

} void func() {

SQLJ declaration; /* OK in JDK 1.2.x; ILLEGAL in JDK 1.1.x (method block)*/

}}

Page 9: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

• Exemplo:

Page 10: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: DeclaraçõesDeclarações (3 de 3)(3 de 3)

• Existem 2 tipos de declarações SQLJ:– Iterator– Context

• Iterator– Declarações que definem classes iterator– Usado para receber os resultados de

consultas

• Context– Usado para criar uma conexão ao Banco de

Dados

Page 11: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: SQLJ SQLJ NamespaceNamespace

• Todas as restrições de nome em Java são aplicadas aqui

• Evitar usar as palavras reservadas, nome de classes e colunas em iterator:– iterator– context– with

Page 12: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: IteratorIterator (1 de (1 de 8)8)

• Declaração:

• Modifiers:– publics, static, etc

• Existem 2 tipos de iterator:– named iterators– positional iterators

Page 13: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: IteratorIterator (2 de (2 de 8)8)

• named iterators

• positional iterators

Page 14: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: IteratorIterator (3 de (3 de 8)8)

• Exemplo named iterators:

#sql iterator MyCheckedIter (String ename, double sal);...MyCheckedIter iter;#sql iter = { SELECT ename, sal FROM Employee};while (iter.next()) {

System.out.println(iter.ename());System.out.println(iter.sal());

}

Page 15: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: IteratorIterator (4 de (4 de 8)8)

• Obtendo os elementos de um Positional iterators– FETCH INTO seguido por endFetch()– O FETCH INTO chama implicitamente o

método next()

Page 16: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

• Exemplo de “positional iterators”

Page 17: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: IteratorIterator (6 de (6 de 8)8)

• Iterator e ResultSet podem existir dentro de outro Iterator em Oracle SQLJ

• Exemplos:CREATE TABLE DEPT (

DEPTNO NUMBER(2),DNAME VARCHAR2(14)

);CREATE TABLE EMP (

EMPNO NUMBER(4),ENAME VARCHAR2(10),SAL NUMBER(7,2),DEPTNO NUMBER(2)

);

Page 18: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: IteratorIterator (7 de (7 de 8)8)

Page 19: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: IteratorIterator (8 de (8 de 8)8)

• Outro exemplo:• Declaração:

• Execução:

Page 20: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: ConnectionConnection (1 (1 de 7)de 7)

• Existem várias formas de criar uma conexão com o Banco de Dados:– Criando um contexto Default

DefaultContext defctx = new DefaultContext ("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger", false);

– Através da declaração SQLJ:

Page 21: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: ConnectionConnection (2 (2 de 7)de 7)

• Exemplo:

#sql context MyContext;...

MyContext myContext = new MyContext("jdbc:oracle:thin:@localhost:1521:dbhome", “scott", "tiger ", false);

Page 22: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: ConnectionConnection (3 (3 de 7)de 7)

• Simples conexão usando connect() da classe oracle.sqlj.runtime.Oracle

– Oracle.connect(MyClass.class, "connect.properties");

– Oracle.connect("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger");

• A função connect() simplifica o processo de criação e usa uma instância da classe DefaultContext

Page 23: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: ConnectionConnection (4 (4 de 7)de 7)

• Formato do arquivo “properties”:

sqlj.url=jdbc:oracle:thin:@localhost:1521:dbhomesqlj.user=scottsqlj.password=tiger

Page 24: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: ConnectionConnection (5 (5 de 7)de 7)

• Multiplas conexões

DefaultContext ctx1 = Oracle.getConnection ("jdbc:oracle:thin:@localhost1:1521:orcl1", "scott", "tiger");

DefaultContext ctx2 = Oracle.getConnection ("jdbc:oracle:thin:@localhost2:1521:orcl2", "bill", "lion");

#sql [ctx1] { SQL operation };...

#sql [ctx2] { SQL operation };

Page 25: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: ConnectionConnection (6 (6 de 7)de 7)

• Se uma conexão é usada várias vezes podemos fazer:

DefaultContext.setDefaultContext(ctx1);#sql { SQL operation };#sql { SQL operation };#sql { SQL operation };...DefaultContext.setDefaultContext(ctx2);#sql { SQL operation }; #sql { SQL operation };#sql { SQL operation };

Page 26: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: ConnectionConnection (7 (7 de 7)de 7)

• Fechando a conexão– Há um “commit” implícito quando a conexão é fechada

...finally {

try { ctx.close();//ouOracle.close();

} catch(SQLException ex) {...

}}...

Page 27: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: InterfacesInterfaces (1 (1 de 3)de 3)

• Iterator e Context são transformados em classes java depois de traduzidos

#sql iterator MyCheckedIter (String ITEM_NAME, Double COST);

class MyCheckedIter extends sqlj.runtime.ref.ResultSetIterImpl implements sqlj.runtime.NamedIterator{

…public String ITEM_NAME(){…}public Double COST(){…}…

}

tradutor

Page 28: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: InterfacesInterfaces (2 (2 de 3)de 3)

• Quando se declara um “iterator” ou “context”, pode-se especificar uma ou mais interfaces

#sql <modifiers> context context_classname implements intfc1,..., intfcN;

• Exemplo:

#sql iterator EmpIter implements mypackage.EmpIterIntfc (String emame, int empno, float sal);

Page 29: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

• Exemplo: evitar acesso a uma coluna da tabela

Erro de compilação

Page 30: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: SubClassesSubClasses

• Exemplo: // Declarando um iterator #sql public static iterator EmpIter(int empno, String

ename);...

//criando a subclassepublic static class EmpColl extends EmpIter {...}...

//usando a subclasse EmpColl ec; #sql ec = { select ename, empno from emp };

Page 31: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: HHosts (1 de 4)osts (1 de 4)

• Usados para troca de valores entre variáveis Java e SQLJ

• Podem ser referenciados dentro de uma instrução SQLJ

• SQLJ fica responsável em devolver os valores

• O tipo da variável host é convertida para o tipo compatível com a coluna

Page 32: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: HHosts (2 de 4)osts (2 de 4)

• Sintaxe: – : [mode] variavel_host – Onde mode pode ser

• IN, OUTOUT e INOUT

– O default é OUT se a variável é parte de uma lista INTO ou em um statement SET e é IN caso contrário

Page 33: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: HHosts (3 de 4)osts (3 de 4)

• Exemplos

String nome;int mat = 5;#sql { SELECT aluno INTO :nome FROM cadastro WHERE matricula = :mat}

Page 34: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Sintaxe Inicial: Sintaxe Inicial: HHosts (4 de 4)osts (4 de 4)

• Outro exemplo: float balance = 12500.0; float minPmtRatio = 0.05; ...#sql { UPDATE creditacct SET minPayment = :(balance *

minPmtRatio) WHERE acctnum = 537845 };

Page 35: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: Scrollable IteratorsScrollable Iterators (1 de 8) (1 de 8)

• Iterator tem apenas um único método para navegar:– next()

• Scrollable Iterators permite o usuário dizer o sentido da iteração

Page 36: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: Scrollable IteratorsScrollable Iterators (2 de 8) (2 de 8)

• Para um iterator tornar-se um Scrollable Iterator ele deve implementar a interface “sqlj.runtime.Scrollable”

• Declaração:#sql public static MyScrIter implements sqlj.runtime.Scrollable

(String ename, int empno);

Page 37: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: Scrollable IteratorsScrollable Iterators (3 de 8) (3 de 8)

• Scrollable Interface:– setFetchDirection(int)

• FETCH_FORWARD (default)• FETCH_REVERSE

– getFetchDirection()– boolean isBeforeFirst()– boolean isFirst()– boolean isLast()– boolean isAfterLast()

Page 38: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: Scrollable IteratorsScrollable Iterators (4 de 8) (4 de 8)

• Métodos de navegação:– boolean previous()– boolean first()– boolean last()– boolean absolute(int)– boolean relative(int)

– void beforeFirst()– void afterLast()

Page 39: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: Scrollable IteratorsScrollable Iterators (5 de 8) (5 de 8)

• Exemplo

...

Page 40: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: Scrollable IteratorsScrollable Iterators (6 de 8) (6 de 8)

• Scrollable Positional Iterators• O comando:

– #sql { FETCH :iter INTO :x, :y, :z }

É uma abreviação para:

– #sql { FETCH NEXT FROM :iter INTO :x, :y, :z }

Page 41: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: Scrollable IteratorsScrollable Iterators (7 de 8) (7 de 8)

• O comando – #sql { FETCH NEXT FROM :iter INTO :x, :y, :z }

sugere um padrão para movimentos alternativos:– #sql { FETCH PREVIOUS FROM :iter INTO :x, :y, :z }– #sql { FETCH FIRST FROM :iter INTO :x, :y, :z }– #sql { FETCH LAST FROM :iter INTO :x, :y, :z }– #sql { FETCH ABSOLUTE :n FROM :iter

INTO :x, :y, :z }– #sql { FETCH RELATIVE :n FROM :iter INTO :x, :y, :z }

Page 42: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: Scrollable IteratorsScrollable Iterators (8 de 8) (8 de 8)

• Não podemos usar constantes numéricas para especificar movimentos:– #sql { FETCH RELATIVE 0 FROM :iter

INTO :x, :y, :z }; (ERRADO)

– #sql { FETCH RELATIVE :(0) FROM :iter INTO :x, :y, :z }; (OK)

Page 43: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: ConstantesConstantes (1 de 2) (1 de 2)

• Declaração com constantes

• As constantes são sempre produzidas como “public static final”

Page 44: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: ConstantesConstantes (2 de 2) (2 de 2)

• Exemplo:#sql public iterator MyScrollableIterator implements

sqlj.runtime.Scrollable with (sensitivity=ASENSITIVE) (String ename, int empno);

• Sensitivity é um atributo da interface sqlj.runtime.ResultSetIterator

• “with” sempre deve vir após “implements”

Page 45: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: TransaçãoTransação (1 de 4) (1 de 4)

• Uma transação é uma seqüência de operações SQL que o BD trata como uma simples unidade

• Uma transação começa depois de:– conectar ao Banco de Dados– depois de um COMMIT– depois de um ROLLBACK

Page 46: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: TransaçãoTransação (2 de 4) (2 de 4)

• Commit automático

• Por default o auto-commit tem o valor “false”

• Ativando o auto-commit:Oracle.getConnection ("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger", true);

Page 47: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: TransaçãoTransação (3 de 4) (3 de 4)

• Mudando o auto-commit

– ctx.getConnection().setAutoCommit(false);

ou

– ctx.getConnection().setAutoCommit(true);

Page 48: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: TransaçãoTransação (4 de 4) (4 de 4)

• Commit e Rollback manual– #sql { COMMIT }– #sql { ROLLBACK }

• Não usar o COMMIT ou o ROLLBACK quando o auto-commit estiver habilitado

Page 49: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: SQL SQL DinâmicoDinâmico (1 de 6) (1 de 6)

• O Oracle9i possui uma extensão para suportar SQL dinâmico em SQLJ– Operações que podem mudar em tempo de

execução

• “Meta bind” são usados para SQL dinâmico em SQLJ

Page 50: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: SQL SQL DinâmicoDinâmico (2 de 6) (2 de 6)

• Sintaxe

:{ Java_bind_expression }ou

:{ Java_bind_expression :: SQL_replacement_code }

Identificador ou expressão Java do tipo String

Seqüência de SQL tokens

Page 51: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: SQL SQL DinâmicoDinâmico (3 de 6) (3 de 6)

• Exemplo 1:...int x = 10;int y = x + 10;int z = y + 10;String table = "new_Emp";#sql { INSERT INTO :{table :: emp} VALUES (:x, :y, :z) };...

Durante a tradução:

INSERT INTO emp VALUES (10, 20, 30);

Durante a execução:

INSERT INTO new_Emp VALUES (10, 20, 30);

Page 52: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: SQL SQL DinâmicoDinâmico (4 de 6) (4 de 6)

• Exemplo 2:...String table = "new_Emp";String query = "ename LIKE ’S%’ AND sal>1000";#sql myIter = { SELECT * FROM :{table :: emp2} WHERE :{query ::

ename=’SCOTT’} };...

Durante a transação:SELECT * FROM emp2 WHERE ename=’SCOTT’;

Durante a execução:SELECT * FROM new_Emp WHERE ename LIKE ’S%’ AND sal>1000;

Page 53: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: SQL SQL DinâmicoDinâmico (5 de 6) (5 de 6)

• Restrições• O “Meta bind” pode ser usado nos

seguintes tipos de comandos:– o nome de uma tabela– o nome de uma coluna (sem alias)– todo ou parte de uma cláusula WHERE– um valor literal ou uma expressão SQL

Page 54: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

Comandos Avançados: Comandos Avançados: SQL SQL DinâmicoDinâmico (6 de 6) (6 de 6)

• Um “Meta bind” não pode ser a primeira expressão de uma operação SQL

• Não pode conter o token “INTO”• Não pode aparecer em qualquer dos

tipos de instruções SQL/SQLJ:– CALL, VALUES, PSM SET, COMMIT,

ROLLBACK, FETCH INTO ou CAST

Page 55: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

RequisitosRequisitos (1 de 2) (1 de 2)

• Para rodar um programa SQLJ precisamos de:– Um driver JDBC– Um SQLJ translator:

• [Oracle Home]/sqlj/lib/translator.zip (ou .jar)

– Um SQLJ runtime:• runtime11.jar, runtime12. jar, runtime. jar,

runtime-nonoracle. jar

– O programa [Oracle Home]/bin/sqlj

Page 56: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

RequisitosRequisitos (2 de 2) (2 de 2)

• Procedimentos para rodar um programa SQLJ:– Colocar todos os .jar necessários no “classpath”– Editar o “path” para a pasta [Oracle Home]/bin/– Criar o arquivo “.sqlj”– Executar o comando:

• sqlj nome_arq.sqlj

– Executar o programa• Java nome_arq

Page 57: Http:// SQLJ: uma alternativa de alto nível a JDBC Universidade Federal de Campina Grande Disciplina: Banco de Dados I Professor:

ReferênciaReferênciass

• Manuais da Oracle– http://www.oracle.com/technology/documentation/in

dex.html

• Tutoriais na Web:– http://www.onjava.com/pub/ct/46 – http://www.javaworld.com/javaworld/jw-05-1999/jw-0

5-sqlj_p.html

– http://www.javaolympus.com/J2SE/Database/SQLJ/SQLJ.jsp

• Leitura recomendada: Java Programming with Oracle SQLJ, Jason Price, O’Reilly