Notas sobre o Release


40.6 Capítulo 3. Utilizando Recursos Avançados

40.6.1 Gravando Aplicativos de Multi-Threaded

Os seguintes devem ser adicionados no final da seção"Aplicativos Mistos Multi-Threaded":

Nota:
É recomendado que você não utilize o tamanho da pilha padrão, mas em vez disso, aumente o tamanho da pilha para, no mínimo, 256 000. O DB2 requer um tamanho de pilha mínimo de 256 000 ao chamar uma função do DB2. Portanto, você deve assegurar-se de alocar um tamanho de pilha total que seja grande o suficiente para seu aplicativo e os requisitos mínimos para uma chamada da função do DB2.

40.6.2 Escrevendo um Aplicativo Unicode do DB2 CLI

Esta é uma nova seção para esse capítulo.

Existem duas áreas principais de suporte para Aplicativos Unicode do DB2 CLI:

  1. A inclusão de um conjunto de funções que podem aceitar argumentos de cadeia Unicode no lugar de argumentos de cadeia ANSI.
  2. A inclusão de novos tipos de dados C e SQL para descrever dados como ANSI ou Unicode. As seguintes seções fornecem mais informações para essas duas áreas. Para ser considerado um aplicativo Unicode, o aplicativo deve definir o atributo de conexão SQL_ATTR_ANSI_APP para SQL_AA_FALSE, antes de uma conexão ser feita. Isso assegurará que a CLI será conectada como um cliente Unicode e que todos os dados Unicode serão enviados em UTF-8 para dados CHAR ou em UCS-2 para dados GRAPHIC.

40.6.2.1 Funções Unicode

A seguir há uma lista de funções ODBC API que suportam as versões Unicode (W) e ANSI (A) (o nome da função terá um W para Unicode):

SQLBrowseConnect        SQLForeignKeys          SQLPrimaryKeys
SQLColAttribute         SQLGetConnectAttr       SQLProcedureColumns
SQLColAttributes        SQLGetConnectOption     SQLProcedures
SQLColumnPrivileges     SQLGetCursorName        SQLSetConnectAttr
SQLColumns              SQLGetDescField         SQLSetConnectOption
SQLConnect              SQLGetDescRec           SQLSetCursorName
SQLDataSources          SQLGetDiagField         SQLSetDescField
SQLDescribeCol          SQLGetDiagRec           SQLSetStmtAttr
SQLDriverConnect        SQLGetInfo              SQLSpecialColumns
SQLDrivers              SQLGetStmtAttr          SQLStatistics
SQLError                SQLNativeSQL            SQLTablePrivileges
SQLExecDirect           SQLPrepare              SQLTables

As funções Unicode que sempre retornam ou usam argumentos de comprimento de cadeia são passadas como contagem de caracteres. Para as funções que retornam a informação do tamanho para os dados do servidor, a exibição do tamanho e precisão são descritas no número de caracteres. Quando o comprimento (tamanho de transferência dos dados) pode referir-se a um dado de cadeia ou sem cadeia, o comprimento é descrito em comprimentos de octeto. Por exemplo, SQLGetInfoW ainda usa o comprimento como contagem de bytes, mas SQLExecDirectW usará contagem de caracteres. A CLI retornará os conjuntos de resultados em Unicode ou ANSI, dependendo da vinculação do aplicativo. Se um aplicativo vincular-se ao SQL_C_CHAR, o driver converterá os dados SQL_WCHAR para SQL_CHAR. O gerenciador de driver mapeia SQL_C_WCHAR para SQL_C_CHAR para drivers ANSI, mas não faz nenhum mapeamento para drivers Unicode.

40.6.2.2 Novos Tipos de Dados e Conversões Válidas

Existem dois novos tipos de dados CLI ou ODBC definidos, SQL_C_WCHAR e SQL_WCHAR. SQL_C_WCHAR indica que o buffer C contém dados UCS-2. SQL_WCHAR indica que uma coluna ou marcador de parâmetro específico contém dados Unicode. Para DB2 Unicode Servers, as colunas gráficas serão descritas como SQL_WCHAR. A conversão será permitida entre SQL_C_WCHAR and SQL_CHAR, SQL_VARCHAR, SQL_LONGVARCHAR e SQL_CLOB, bem como entre os tipos de dados gráficos.


Tabela 10. Conversões de Dados Suportadas
Tipo de Dados


SQL

S
Q
L
_
C
_
C
H
A
R
S
Q
L
_
C
_
W
C
H
A
R
S
Q
L
_
C
_
L
O
N
G
S
Q
L
_
C
_
S
H
O
R
T
S
Q
L
_
C
_
T
I
N
Y
I
N
T
S
Q
L
_
C
_
F
L
O
A
T
S
Q
L
_
C
_
D
O
U
B
L
E
S
Q
L
_
C
_
T
Y
P
E
_
D
A
T
E
S
Q
L
_
C
_
T
Y
P
E
_
T
I
M
E
S
Q
L
_
C
_
T
Y
P
E
_
T
I
M
E
S
T
A
M
P
S
Q
L
_
C
_
B
I
N
A
R
S
S
Q
L
_
C
_
B
I
T
S
Q
L
_
C
_
D
B
C
H
A
R
S
Q
L
_
C
_
C
L
O
B
_
L
O
C
A
T
O
R
S
Q
L
_
C
_
B
L
O
B
_
L
O
C
A
T
O
R
S
Q
L
_
C
_
D
B
C
L
O
B
_
L
O
C
A
T
O
R
S
Q
L
_
C
_
B
I
G
I
N
T
S
Q
L
_
C
_
N
U
M
E
R
I
C
BLOB
X
X









D




X
CHAR
D
X
X
X
X
X
X
X
X
X
X
X




X
X
CLOB
D
X









X



X


DATE
X
X






D


X






DBCLOB


X









X


D



X
DECIMAL
D
X
X
X
X
X
X




X
X




X
X
DOUBLE
X
X
X
X
X
X
D





X




X
X
FLOAT
X
X
X
X
X
X
D





X




X
X
GRAPHIC
(Não-Unicode)
X
X











D



GRAPHIC
(Unicode)
X
X
X
X
X
X
X
X
X
X
X
X
D




X


INTEGER
X
X
D
X
X
X
X





X




X
X
LONG
VARCHAR
D
X









X





LONG
VARGRAPHIC
(Não-Unicode)
X
X









X


D



LONG
VARGRAPHIC
(Unicode)
X
X









X


D






NUMERIC
D
X
X
X
X
X
X





X




X
REAL
X
X
X
X
X
D
X





X




X
SMALLINT
X
X
X
D
X
X
X





X




X
X
BIGINT
X
X
X
X
X
X
X




X
X




D
X
TIME
X
X







D
X






TIMESTAMP
X
X






X
X
D






VARCHAR
D
X
X
X
X
X
X
X
X
X
X
X




X
X
VARGRAPHIC
(Não-Unicode)
X
X











D



VARGRAPHIC
(Unicode)
X
X
X
X
X
X
X
X
X
X
X
X
D




X


Nota:

D
A conversão é suportada. Essa é a conversão padrão para o tipo de dados SQL.

X
Todos os IBM DBMSs suportam a conversão.

espaço branco
Nenhum IBM DBMS suporta a conversão.

40.6.2.3 Palavra-Chave Obsoleta/Valor de Correção

Antes dos aplicativos Unicode serem suportados, os aplicativos que eram escritos para trabalhar com dados de caracteres de byte único podiam trabalhar com dados gráficos de byte duplo através de uma série de palavras-chave do arquivo cli ini, como GRAPHIC=1,2 ou 3, Patch2=7. Essa alternativa apresentava os dados gráficos como dados de caracteres e também afetavam o comprimento relatado dos dados.

Essas palavras-chave não não mais necessárias para aplicativos Unicode, e não devem ser utilizadas por causa do risco de efeitos colaterais potenciais. Se você não souber se um aplicativo específico é um aplicativo Unicode, sugerimos que tente sem quaisquer palavras-chaves que afetem a manipulação de dados gráficos.

40.6.2.4 Literais em Bancos de Dados Unicode

Em bancos de dados não-unicode, os dados nas colunas LONG VARGRAPHIC e LONG VARCHAR não podem ser comparados. Os dados no GRAPHIC/VARGRAPHIC e as colunas CHAR/VARCHAR podem ser apenas comparadas ou atribuídas para cada um, utilizando as funções explícitas cast desde que a página de código implícita seja suportada. Isto inclui os literais GRAPHIC/VARGRAPHIC e CHAR/VARCHAR onde o literal GRAPHIC/VARGRAPHIC é diferente do literal CHAR/VARCHAR por um prefixo G.

Para os bancos de dados Unicode, a conversão entre os literais GRAPHIC/VARGRAPHIC e CHAR/VARCHAR não são requeridos. Um prefixo G, também será requerido no início do literal GRAPHIC/VARGRAPHIC. Contanto que pelo menos um dos argumentos seja um literal, as conversões implícitas ocorrerão. Isso permite que literais com ou sem o prefixo G sejam utilizados em instruções que usam SQLPrepareW() ou SQLExecDirect().Os literais para LONG VARGRAPHICs já possuem um prefixo G.

Para obter mais informações, consulte a publicação "Conversão entre Tipos de Dados" no "Capítulo 3. Elementos de Linguagem" da publicação SQL Reference.

40.6.2.5 Configuração das Palavras-chave CLI Nova

As três palavras-chave foram incluídas para evitar que qualquer suplemento extra seja conectado aos aplicativos Unicode para um banco de dados.

  1. DisableUnicode

    Descrição da Palavra-chave
    Desativa o suporte sublinhado para o Unicode.

    Sintaxe da Palavra-chave db2cli.ini:
    DisableUnicode = 0 | 1

    Definição Padrão:
    0 (falso)

    Manual de Definições do DB2 CLI/ODBC:
    Esta palavra-chave não pode ser definida utilizando o bloco de notas de Definições CLI/ODBC. O arquivo db2cli.ini deve ser modificado diretamente para que a palavra-chave possa ser utilizada.

    Notas de Uso:

    Com o suporte Unicode ativado, e quando chamada por um aplicativo Unicode, a CLI tentará conectar-se ao banco de dados utilizando a melhor página de códigos possível do cliente para assegurar que não haja perda de dados desnecessária por causa da conversão de página de códigos. Isso pode aumentar o tempo de conexão quando as páginas de códigos são trocadas ou pode causar conversões de páginas de códigos no cliente que não ocorriam antes da inclusão desse suporte.

    A definição desta palavra-chave para True fará com que todos os dados Unicode sejam convertidos, primeiro, para a página de códigos local do aplicativo, antes dos dados serem enviados para o servidor. Isso pode causar a perda dos dados que não possam ser representados na página de códigos local.

  2. ConnectCodepage

    Descrição da Palavra-chave
    Especifica uma determinada página de códigos para ser utilizada na conexão com a origem de dados, para evitar sobrecarga extra de conexão.

    Sintaxe da Palavra-chave db2cli.ini:
    ConnectCodepage = 0 | 1 <any valid db2 code page>

    Definição Padrão:
    0

    Manual de Definições do DB2 CLI/ODBC:
    Esta palavra-chave não pode ser definida utilizando o bloco de notas de Definições CLI/ODBC. O arquivo db2cli.ini deve ser modificado diretamente para ser utilizado por esta palavra-chave.

    Notas de Uso:

    Aplicativos não-Unicode sempre conectam-se ao banco de dados utilizando a página de códigos local do aplicativo ou a definição de ambiente DB2Codepage. Por padrão, a CLI assegurará que os aplicativos Unicode sejam conectados aos bancos de dados Unicode utilizando as páginas de códigos UTF-8 e UCS-2 e sejam conectados aos bancos dados não-Unicode utilizando a página de códigos do banco de dados. Isso assegura que não haja perda de dados desnecessária por causa da conversão da página de códigos.

    Esta palavra-chave permite que o usuário especifique a página de códigos do banco de dados ao conectar-se a um banco de dados não-Unicode, para evitar sobrecarga extra na conexão.

    Especifique um valor 1 para provocar SQLDriverConnect() retornar ao valor correto da cadeia de conexão de saída, assim o valor poderá ser utilizado no futuro para chamar SQLDriverConnect().

  3. UnicodeServer

    Descrição da Palavra-chave
    Indica que a origem de dados é um servidor unicode. Equivalente para definir ConnectCodepage=1208.

    Sintaxe da Palavra-chave db2cli.ini:
    UnicodeServer = 0 | 1

    Definição Padrão:
    0

    Manual de Definições do DB2 CLI/ODBC:
    Esta palavra-chave não pode ser definida utilizando o bloco de notas de Definições CLI/ODBC. O arquivo db2cli.ini deve ser modificado diretamente para que a palavra-chave possa ser utilizada.

    Notas de Uso:

    Esta palavra-chave é equivalente para ConnectCodepage=1208 e é incluída apenas por conveniência. Defina esta palavra-chave para evitar conexões suplementares extra quando for conectar o DB2 para OS/390 Versão 7 ou superior. Não existe a necessidade de definir esta palavra-chave para os banco de dados do DB2 para Windows, DB2 para Unix ou DB2 para OS/2, desde que não exista solicitação de uma processamento extra.

40.6.3 MTS (Microsoft Transaction Server) como Transaction Monitor

A informação a seguir corrige o valor padrão para a palavra-chave de configuração DISABLEMULTITHREAD na subseção "Instalação e Configuração":

40.6.4 Scrollable Cursors

A seguinte informação deve ser incluída na seção "Cursores deslocáveis":

40.6.4.1 Suporte ao cursor deslocável no lado do servidor para OS/390

O cliente UDB para as plataformas Unix, Windows e OS/2 suporta cursores deslocáveis atualizáveis no lado do servidor ao executar em bancos de dados OS/390 Versão 7. Para acessar um cursor deslocável do OS/390 em um ambiente em três camadas, o cliente e o gateway devem estar executando o DB2 UDB Versão 7.1, FixPak 3 ou posterior.

Existem duas interfaces de ativação de aplicativos que podem acessar cursores deslocáveis: ODBC e JDBC. A interface JDBC pode acessar somente cursores deslocáveis estáticos, enquanto a interface ODBC pode acessar somente cursores deslocáveis estáticos e guiados por teclas no lado do servidor.

Atributos do cursor

A tabela abaixo lista os atributos padrão para cursores do OS/390 Versão 7 no ODBC.

Tabela 11. Atributos padrão para cursores do OS/390 no ODBC
Tipo de cursor Sensibilidade do cursor Cursor atualizável Concorrência do cursor Cursor deslocável
somente avançoa não especificado não atualizável concorrência somente leitura não deslocável
estático insensível não atualizável concorrência somente leitura deslocável
guiado por conjunto de teclas sensível atualizável concorrência de valores deslocável

a Somente avanço é o comportamento padrão de um cursor deslocável sem a cláusula FOR UPDATE. Especificar FOR UPDATE em um cursor somente avanço cria um cursor atualizável, com concorrência de bloqueio, não deslocável.


Orientações de busca suportadas

Todas as orientações de busca ODBC são suportadas através das interfaces SQLFetchScroll ou SQLExtendedFetch.

Atualização do cursor guiado por conjunto de teclas

Um cursor guiado por conjunto de teclas é atualizável. O driver CLI anexa a cláusula FOR UPDATE na consulta, exceto quando a consulta é emitida como SELECT ... FOR READ ONLY, ou se a cláusula FOR UPDATE já existir. O cursor guiado por conjunto de teclas implementado no DB2 para OS/390 é um cursor de concorrência de valores. O cursor de concorrência de valores resulta em bloqueio otimista, nos quais os bloqueios não são retidos até que seja tentada uma atualização ou exclusão. Quando for tentada uma atualização ou exclusão, o servidor do banco de dados compara os valores anteriores do aplicativo recuperado com os valores atuais da tabela fundamental. Se os valores corresponderem, a atualização ou exclusão ocorre. Se não corresponderem, a operação falha. Caso ocorra uma falha, o aplicativo deve consultar os valores novamente e reemitir a atualização ou a exclusão, se ainda for aplicável.

O aplicativo pode atualizar o cursor guiado por teclas de suas formas:

Detectando problemas em aplicativos criados antes do suporte ao cursor deslocável

Como o suporte ao cursor deslocável é novo, alguns aplicativos ODBC que trabalhavam com releases anteriores do UDB para OS/390 ou UDB para Unix, Windows, e OS/2 podem encontrar mudanças no comportamento ou no desempenho. Isso ocorre porque antes do suporte aos cursores deslocáveis, os aplicativos que solicitavam um cursor deslocável recebiam um cursor somente de avanço. Para restaurar o comportamento anterior do aplicativo, antes do suporte ao cursor deslocável, defina as seguintes palavras-chave de configuração no arquivo db2cli.ini:

Tabela 12. Valores de palavra-chave de configuração para restaurar o comportamento do aplicativo antes do suporte ao cursor deslocável
Definição da palavra-chave de configuração Descrição
PATCH2=6 Retorna uma mensagem indicando que os cursores deslocáveis (guiados por conjunto de teclas e estáticos) não são suportados. O CLI automaticamente rebaixa qualquer pedido de um cursor deslocável para um cursor somente de avanço.
DisableKeysetCursor=1 Desativa os cursores deslocáveis guiados por teclas no lado do servidor e no lado do cliente. Pode ser utilizado para forçar o driver do CLI a fornecer ao aplicativo um cursor estático quando o cursor guiado por teclas for solicitado.
UseServerKeysetCursor=0 Desativa o cursor guiado por teclas no lado do servidor para aplicativos que utilizam a biblioteca do cursor guiado por teclas no lado do cliente para simular um cursor guiado por teclas. Utilize essa opção somente quando ocorrerem problemas com o cursor guiado por teclas no lado do servidor, já que o cursor no lado do cliente resulta em muita sobra e geralmente tem desempenho mais baixo que o cursor no lado do servidor.

40.6.5 Utilizando o SQL Composto

A seguinte nota está faltando na publicação:

   Qualquer instrução SQL que pode ser preparada dinamicamente, diferentemente
   de uma consulta, que pode ser executada como uma instrução dentro de uma
   instrução composta.
 
   Nota: Dentro do SQL Composto Atômico, instruções savepoint, savepoint de
   liberação e rollback para savepoint SQL são também desabilitadas.
   Do contrário, o SQL Composto Atômico é desabilitado no savepoint.

40.6.6 Utilizando os Procedimentos Armazenados

40.6.6.1 Gravando um Procedimento Armazenado em CLI

A seguir uma limitação não documentada nos procedimentos armazenados CLI:

   Se estiver fazendo chamadas aos procedimentos armazenados CLI múltiplos,
   o aplicativo fecha os cursores abertos de um procedimento armazenado
   antes de chamar o próximo procedimento armazenado. Mais especificamente,
   o primeiro conjunto de cursores abertos devem ser fechados antes do
   próximo procedimento armazenado tentar abrir um cursor.

40.6.6.2 Procedimentos Armazenados e Vinculação Automático da CLI

O item a seguir suplementa as informações na publicação:

O driver CLI/ODBC normalmente irá fazer a vinculação automática dos pacotes da CLI na primeira vez que um aplicativo CLI/ODBC executar a SQL no banco de dados, contanto que o usuário tenha o privilégio ou a autorização adequada. A vinculação automática dos pacotes da CLI não pode ser executada de dentro de um procedimento armazenado e, portanto, não ocorrerá se a primeira coisa que um aplicativo fizer for chamar um procedimento armazenado da CLI. Antes de executar um aplicativo da CLI que chama um procedimento armazenado da CLI em um novo banco de dados do DB2, você deve conectar os pacotes da CLI uma vez com este comando:

UNIX
db2 bind <BNDPATH>/@db2cli.lst blocking all

Windows e OS/2
db2bind "%DB2PATH%\bnd\@db2cli.lst" blocking

A abordagem recomendada é sempre conectar estes pacotes ao mesmo tempo em que o banco de dados é criado para evitar a vinculação automática no run-time. A vinculação automática poderá falhar se o usuário não tiver privilégio ou se outro aplicativo tentar fazer a vinculação automática ao mesmo tempo.


[ Início da Página | Página Anterior | Próxima Página | Índice | Índice Remissivo ]