quinta-feira, 20 de dezembro de 2007

Melhorias no SQL do DB2 V8 z/OS

E para começar, o primeiro assunto postado aqui é sobre algumas melhorias no SQL do DB2 z/OS V8.

Melhorias no SQL do DB2 V8 z/OS

A versão 8 do DB2 trouxe novos statements SQL para facilitar e melhorar a vida de todos que usam o DB2. Aqui segue uma lista de todas as novas funcionalidades do SQL.

  • SELECT from INSERT
  • Objeto Sequence
  • Melhorias para colunas do tipo Identity
  • Predicado DISTINCT
  • Scalar fullselect
  • Multiple-row INSERT e FETCH
  • Expressões de tabelas
  • GET DIAGNOSTICS
  • Dynamic scrollable cursors
  • Melhorias na linguagem SQL procedural
  • Uso mais freqüente de indicies
  • SQL statements maiores e mais complexos
  • Multiple DISTINCT keywords
  • Expressões na cláusula GROUP BY
  • Menos restrições para funções de colunas
  • Nomes das colunas qualificados no statement de INSERT
  • Clausula ORDER BY para o statement SELECT INTO
  • Formatos de input adicionais para timestamp
  • Colunas ROWID explicitamente definidas não são mais necessárias para LOBs
  • Comentários para planos e packages
  • Drop implícito para tabelas temporárias globais no commit
  • Mudanças no SQL para multilevel security com granularidade de coluna
  • Comentários nos statements SQL
  • Encriptação e desencriptação de dados
  • Melhor controle sobre os locks em queires


Vamos começar esse post com a explicação do SELECT from INSERT statement. Os demais itens listados serão contemplados também com o passar dos dias

SELECT from INSERT

Esse novo statement SQL permite a seleção de colunas de uma tabela no momento da inserção dos dados. Imagine uma tabela que tenha definição de uma coluna do tipo IDENTITY como o exemplo abaixo:

CREATE TABLE EMPLOYEE

(EMPNO INTEGER GENERATED ALWAYS AS IDENTITY,

NAME CHAR(30),

SALARY DECIMAL(10,2),

DEPTNO SMALLINT,

LEVEL CHAR(30),

HIRETYPE VARCHAR(30) NOT NULL WITH DEFAULT 'New Hire',

HIREDATE DATE NOT NULL WITH DEFAULT);


A coluna EMPNO é definida como IDENTITY. Nesse caso, quando há inserção de dados nessa tabela, a coluna EMPNO não é referenciada, pois o próprio DB2 irá gerar o valor para lá. Antes do DB2 V8 só era possível saber o valor da coluna EMPNO fazendo um SELECT após o INSERT.


Com o novo statement “SELECT from INSERT” é possível já saber o valor que vai ser atribuído a coluna no momento do INSERT. Portanto no DB2 V8 ao invés de fazer um SELECT após o INSERT, é possível fazer o SELECT no momento do INSERT como mostra o exemplo abaixo.

SELECT EMPNO, HIRETYPE, HIREDATE

FROM FINAL TABLE (INSERT INTO EMPLOYEE (NAME, SALARY, DEPTNO, LEVEL)

VALUES('Mary Smith', 35000.00, 11, 'Associate'));


Nesse exemplo é recuperado o conteúdo das três colunas que têm valores atribuídos pelo DB2 no momento da inserção: EMPNO (IDENTIDY), HIREDATE e HIRETYPE (que tem cláusula DEFALUT)


Os valores que podem ser recuperados nesse novo tipo de statement SQL são:

  • Valores de colunas que são resultados de uma expressão
  • Colunas definidas como DEFAULT
  • Todos os valores de uma linha inserida, sem especificar o nome da coluna
  • os valores inseridos pela operação MULTI-ROW INSERT
  • Valores que são alterados por um BEFORE TRIGGER
  • Valores que são gerados automaticamente, como ROWID ou INDETITY
Maiores Informações
Manual DB2 UDB for z/OS V8 SQL reference: http://publib.boulder.ibm.com/cgi-bin/bookmgr/BOOKS/dsnsqj14/CCONTENTS

2 comentários:

Unknown disse...

Fabrício, você conhece clientes que migraram para o v8 e ativaram o New Function Mode? Temos o v8 na empresa, mas estamos usando em Compatibility Mode, e essas novidades permanecem desabilitadas. Um abraço.

Anônimo disse...

Olá

Primeiramente gostaria de parabenizar pela elaboração do seu blog. São poucas as fontes de informações que facilitam o entendimento do DB2. Na verdade, estou com um grande problema, tenho um servidor com Windows 32 bits, onde está instalado a base de dados. Toda as entações funcionam perfeitamente com boa velocidade, porém uma estação utilizada para desenho com software CAD, Windows 7 64 bits está praticamente se arrastando para conectar e fazer as transações no banco de dados. O sistema ERP somente funciona com client 32 bits. Será que há alguma configuração para ajustar e melhorar esta velocidade de conexão? Desde já agradeço
Márcio Luiz Buss
marcio_buss@hotmail.com