Tivoli Service Desk 6.0 Developer's Toolkit - Referência de Linguagem do Script

Manipulação de SQL

Retornar à Página Principal


SQLBeginWork

Descrição

Inicia uma transação.

Sintaxe

FUNCTION SQLBeginWork: INTEGER;

Notas

Em geral, o TSD Script consolida cada instrução SQL na sua conclusão bem-sucedida. No entanto, há vezes em que você deseja que uma série de instruções SQL seja consolidada ou removida juntamente. SQLBeginWork pausa consolidações automáticas de cada instrução SQL até que seja feita uma chamada paraSQLCommit ou SQLRollBack.

Após uma consolidação ou remoção de alterações, a transação terminará e o TSD Script continuará a consolidação automática. SQLBeginWork deve ser chamada novamente para iniciar outra transação.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test:INTEGER;
PRIVATE
ROUTINES
FUNCTION Test:INTEGER IS
VARIABLES
ok : BOOLEAN;
 ACTIONS
(* iniciar a transação (transação) ==> isso desativa a
 consolidação normal
 automática após cada operação SQL *)
  SQLBeginWork;
(* faça seu trabalho aqui ok := .... *)
IF ok THEN
 SQLCommit; (* salvar alterações desde SQLBeginWork *)
ELSE
 SQLRollBack; (* inverter alterações desde SQLBeginWork *)
END;
(* Após uma consolidação ou remoção de alterações, a transação será
 terminada. *)
(* Chamar SQLBeginWork novamente para iniciar a próxima transação se
 não *)
(* desejar a consolidação automática *)
END; --Test--

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLCloseAll

Descrição

Fecha cursores abertos e instruções preparadas e desconecta conexões DBMS abertas.

Sintaxe

FUNCTION SQLCloseAll: INTEGER;

Notas

Apesar de não ser necessário, você deveria chamar essa rotina antes de sair do arquivo .kb principal. Isso consolida todas as transações em andamento.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test:INTEGER;
PRIVATE
ROUTINES
FUNCTION Test:INTEGER IS
ACTIONS
(* executar algumas operações SQL... *)
SQLCloseAll;
END;

Códigos de Retorno

Códigos de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLCloseCursor

Descrição

Fecha um cursor aberto anteriormente por uma chamada para SQLSelect.

Sintaxe

FUNCTION SQLCloseCursor(cursor: SQLCURSOR): INTEGER;

Atenção: Uma operação de remoção de alterações fecha todos os cursores (consulte SQLRollBack).

A maioria dos drivers não permite a especificação de cursores que possam estender unidades de trabalho (por exemplo, declará-las WITH HOLD). Uma exceção é o driver CLI do DB2. Depois de uma operação de consolidação, todos os cursores são fechados. Portanto, se você executar operações SQL (tais como atualizações) em um loop de busca, a consolidação automática deverá ser desativada após cada instrução SQL.

Nota: Você deve fechar todos os cursores antes de executar uma operação de consolidação ou de remoção de alterações.

Notas do Argumento

Nome do Argumento Descrição
cursor Este é o parâmetro do tipo SQLCursor que foi definido por uma chamada anterior a SQLSelect.

Notas

Na conclusão, SQLCloseCursor define o cursor como $Unknown. Uma chamada para SQLCloseCursor com um cursor fechado anteriormente sai com um erro. Não é exibida nenhuma mensagem de erro.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test:INTEGER;
PRIVATE
ROUTINES
FUNCTION Test:INTEGER IS
VARIABLES
(* colunas *)
name: STRING;
(* vários *)
cursor: SQLCursor;
retCd: INTEGER;
ACTIONS
(* selecionar todos os empregados *)
retCd := SQLSelect(cursor,'* from emp');
IF (retCd < 0) THEN
 EXIT retCd;
END;
 retCd := SQLFetch(cursor,name);
 WHILE (retCd > 0) DO
 (* executar algumas operações com base nesta linha...
 .
 .
 .
 *)
 (* obter o registro seguinte *)
 retCd := SQLFetch(cursor);
END;
(* agora, fechar o cursor *)
    SQLCloseCursor(cursor);
              END;

Códigos de Retorno

Código de Retorno Descrição
1 O cursor foi fechado com êxito
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script e

Consulte também


SQLCloseStatement

Descrição

Fecha uma instrução aberta anteriormente (preparada) por SQLPrepare.

Sintaxe

FUNCTION SQLCloseStatement(statement: SQLSTATEMENT): INTEGER;

Atenção

Uma operação de remoção de alterações destrói todas as instruções preparadas. Uma operação de consolidação fecha todas as instruções preparadas que não indicam um cursor aberto.

Nota: Você deve fechar manualmente todas as instruções afetadas com SQLCloseStatement antes de executar uma consolidação ou remoção de alterações.

Notas do Argumento

Nome do Argumento Descrição
statement O parâmetro statement é inicializado por uma chamada para SQLPrepare

Notas

SQLCloseStatement é suportado por todos os drivers. Na conclusão, SQLCloseStatement define a instrução como $Unknown.

Uma chamada para SQLCloseStatement com uma instrução fechada anteriormente sai com um erro. Não é exibida nenhuma mensagem de erro.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF users: LIST OF STRING):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF users: LIST OF STRING):INTEGER IS
VARIABLES
stmt: SQLStatement;
retCd: INTEGER;
ACTIONS
SQLBeginWork
   (* inserir os nomes de usuários passados *)
 retCd := SQLPrepare(stmt,'INSERT INTO USERS VALUES (?)');
IF (retCd < 0) THEN
 SQLRollBack; (* terminar a transação *)
      EXIT retCd;
              END;
   FOR users DO
    retCd := SQLExecute(stmt,users[$current]);
   IF retCd < 0 THEN
  SQLCloseStatement(stmt);
 SQLRollBack; (* inverter alterações e liberar bloqueios *)
      EXIT retCd;
              END;
   END; (* para *)
 (* fechar a instrução preparada *)
  SQLCloseStatement(stmt);
 SQLCommit; (* salvar alterações e liberar bloqueios *)
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLCommand

Descrição

Emite comandos não-SQL dependentes da implementação para o interpretador de SQL.

Sintaxe

FUNCTION SQLCommand(sub_command: STRING): INTEGER;

Notas do Argumento

Nome do Argumento Descrição
sub_command A cadeia de comandos é composta de duas partes: a primeira parte é o subcomando do gerenciador de banco de dados; a segunda contém qualquer parâmetro para este comando. O comando não faz distinção entre maiúsculas/minúsculas. Todos os parâmetros são separados por espaço em branco. Consulte a seção a seguir para obter os subcomandos disponíveis.

Notas

Subcomandos de SQLCommand

Conforme mostrado na tabela, há vários subcomandos para a instrução SQLCommand.

Vários subcomandos requerem uma cadeia connection_handle_string. Para especificar o banco de dados de origem selecionado atualmente, você pode passar $Current. Como alternativa, se você não especificar nada, o banco de dados de origem selecionado atualmente será utilizado.

Para obter uma cadeia de identificadores de conexão, chame SQLCommand com o subcomando GET CURRENT CONNECTION. O valor de retorno inteiro poderá, em seguida, ser atribuído a uma cadeia. Esta cadeia é a connection_handle_string.

Há vários subcomandos que especificam uma source_name. (Parâmetros do nome de origem são sempre opcionais.) Para especificar a origem na qual você está conectado atualmente, passe $Current. Para especificar a origem dos dados padrão, você pode passar $Default. Se não for especificado nenhum nome de origem, $Current será assumido.

A tabela a seguir mostra subcomandos para SQLCommand ('<sub_command>'), assim como seus parâmetros e descrições. Os valores na coluna Parâmetros são fornecidos pelo usuário.

Subcomando Parâmetro Descrição
CONNECT connect_string Abre uma conexão com o DBMS. Este comando deve ser chamado antes de qualquer operação SQL. Em geral, é uma das primeiras instruções chamadas por seu aplicativo. Se connect_string não for fornecida, será feita uma conexão com a origem dos dados padrão. Depois da conexão ser bem-sucedida, ela se torna a conexão selecionada atualmente.
DISCONNECT connection_handle_string Desconecta-se da conexão referida por connection_handle_string. O identificador da conexão é um inteiro que pode ser obtido chamando-se SQLCommand (GET CURRENT CONNECTION) imediatamente após a conexão.
GET CASE CONVERSION source_name Retorna o modo de conversão de maiúsculas e minúsculas para nomes de objeto (não para dados):
0 = none
1 = upper
2 = lower
Um código de retorno negativo indica um erro.
GET CASE SENSITIVITY source_name Informa ao Tivoli Service Desk Developer's Toolkit se o DBMS possui nomes de objetos que fazem distinção entre maiúsculas e minúsculas (como nomes de tabelas, nomes de colunas e outros). Isso não se aplica a dados (apesar de em alguns DBMSs, como o SQLServer, nomes de objetos e dados que fazem distinção entre maiúsculas e minúsculas coexistirem).
Os valores de retorno possíveis são:
0 = não faz distinção entre maiúsculas e minúsculas
1 = faz distinção entre maiúsculas e minúsculas
GET CATALOG CASE CONVERSION source_name Retorna o modo de conversão de maiúsculas e minúsculas atual para dados nas tabelas de catálogos do sistema:
0 = none
1 = upper
2 = lower
Um valor de retorno negativo indica um erro.
GET CHECK DRIVER source_name Retornará TRUE se (na hora da conexão) for executada uma verificação para determinar se o driver (por exemplo, CDSS06.DLL) é um dos não-suportados; caso contrário, retornará FALSE.
GET CURRENT CONNECTION source_name Retorna o identificador de conexão inteiro para a conexão selecionada atualmente. Se você receber um código de retorno menor que zero, consulte a página Definições de Códigos de Erro SQL para obter mais informações.
GET CURRENT ODBC HENV   Retorna o identificador de ambiente ODBC real utilizado pelo Tivoli Service Desk Developer's Toolkit. Isso só é aplicado ao utilizar drivers ODBC. Um valor de retorno negativo indica um erro.
GET CURRENT ODBC HDBC   Retorna o identificador de conexão ODBC real da conexão principal atual do Tivoli Service Desk Developer's Toolkit. Isso só é aplicado ao utilizar drivers ODBC. Um valor de retorno negativo indica um erro.
GET DATE FORMAT source_name Retorna o formato de data atual do DBMS.
GET DBMS source_name Retorna o código inteiro para o DBMS da origem chamada source_name. Os valores de retorno possíveis são: 0 ou 2 (DB2/); 1 (Oracle); 3, 23 ou 24 (SQLServer); 4 ou 12 (SYBASE); e 16 ou 17 (INFORMIX).
GET IN TRANSACTION connection_handle Retornará 1 se uma transação estiver em andamento (isto é, SQLBeginWork foi chamado e SQLCommit ou SQLRollback ainda não). Um código de retorno 0 indica que nenhuma transação está em andamento. Um código de retorno negativo indica um erro.
GET MODULE   Retorna o código inteiro para a biblioteca SQL que está sendo utilizada. Isso serve para compatibilidade retroativa apenas. Os valores possíveis dos códigos de módulo são: 2 = (Plataforma múltipla - X/OPEN e ODBC).
GET MODULE TYPE   Retorna o tipo de módulo atual. Isso serve para compatibilidade retroativa apenas. Os valores possíveis são: 5 = X/OPEN
Nota: Isso é semelhante ao subcomando GET MODULE, exceto que GET MODULE mapeia ODBC para Q+E versão 2 para compatibilidade retroativa.
GET MULTI CONNECT source_name Retornará 1 se a origem chamada source_name suportar conexões múltiplas e simultâneas.
GET SHOW WARNINGS source Retornará TRUE se caixas de mensagens para avisos forem ativadas; caso contrário, retornará FALSE.
GET TIME FORMAT source_name Retorna o formato de hora atual do DBMS.
GET UPDATE LOCK STYLE source_name Retorna o estilo de bloqueio atual:
0 = none
1 = selecionar para atualizar
2 = atualizar
Um código de retorno negativo indica um erro.
GET UPDATE MODE source_name Retorna o modo de atualização da concorrência passiva. Os valores possíveis são:
0 = none
1 = selecionar
2 = DBMS otimista
Um código de retorno negativo indica um erro.
RESTORE CURRENT QUALIFIER   Busca o valor do qualificador salvo mais recentemente na pilha interna e torna-o o qualificador atual da conexão atual.
RESTORE CURRENT SYSQUALIFIER   Busca o qualificador do valor da tabela de sistemas salva mais recentemente na pilha interna e torna-o o qualificador de sistema atual da conexão atual.
SAVE CURRENT QUALIFIER   Armazena o valor do qualificador da tabela atual da conexão atual em uma pilha interna.
SAVE CURRENT SYSQUALIFIER   Armazena o valor do qualificador da tabela de sistemas atual da conexão atual em uma pilha interna.
SET CASE CONVERSION conversion Define o modo de conversão de maiúsculas e minúsculas para nomes de objetos (não para dados). Os valores válidos para conversion são: NONE, UPPER e LOWER.
SET CASE SENSITIVITY true | false Informa ao Tivoli Service Desk Developer's Toolkit se o DBMS atual possui nomes de objetos que fazem distinção entre maiúsculas e minúsculas (como nomes de tabelas, nomes de colunas e outros). Isso não se aplica a dados (apesar de em alguns DBMSs, como o SQLServer, nomes de objetos e dados que fazem distinção entre maiúsculas e minúsculas coexistirem).
SET CATALOG CASE CONVERSION conversion Define o modo de conversão de maiúsculas e minúsculas atual para dados nas tabelas de catálogos do sistema. Os valores válidos para conversion são UPPER, LOWER e NONE.
SET CHECK DRIVER true | false Define o estado atual para execução da verificação de validação do driver.
SET CONNECTION connection_handle_string Define a conexão selecionada atualmente para o identificador referido por connection_handle_string.
SET CURRENT QUALIFIER qualifier Define o qualificador de tabelas da conexão selecionada atualmente.
SET CURRENT SYSQUALIFIER qualifier Define o qualificador de tabelas de sistema da conexão selecionada atualmente.
SET DBMS dbms Permite a substituição do DBMS reconhecido atualmente. (Consulte GET DBMS para obter uma lista de valores de DBMS.)
SET SHOW WARNINGS true | false Define o estado atual para mostrar caixas de mensagens de aviso.
SET UPDATE LOCK STYLE style Permite que você defina o estilo de bloqueio atual localmente. Os valores válidos para style são: NONE, SELECT FOR UPDATE e UPDATE.
SET UPDATE MODE none | select | dbms_optimistic Informa ao Tivoli Service Desk Developer's Toolkit como a concorrência passiva deve ser executada:
NONE - o registro original não é comparado ao banco de dados. SELECT - executa uma seleção SQL do registro e a compara com o registro original utilizado nos mecanismos de concorrência passiva para detectar se a versão DBMS do registro foi alterada.
DBMS_OPTIMISTIC - tenta utilizar os mecanismos de concorrência passiva específicos para detectar se a versão DBMS do registro foi alterada.
START USING DATABASE database_name Este comando alterna o banco de dados ativo atualmente para database_name.
TRACE ALERT DESTINATION file name Define o arquivo de destino para qualquer mensagem de alerta gerada por um temporizador de rastreamento.
Se utilizadas, as informações serão anexadas ao arquivo especificado. Por padrão, este arquivo é chamado sql_trc.alr.
Nota: As informações são anexadas no arquivo existente. Isso é diferente do comando TRACE FILE, que trunca informações para o arquivo especificado.
TRACE AUTO FLUSH true | false Se TRACE AUTO FLUSH for definido como TRUE, a saída para o arquivo de rastreamento será esvaziada (gravada no disco) toda vez que for gravada. Normalmente, a saída para o log é gravada no disco somente quando o rastreamento é concluído ou quando o sistema operacional decide esvaziar um buffer.
Uma falha no sistema operacional pode fazer com que algumas ou todas as informações de rastreamento sejam perdidas. O comando TRACE AUTO FLUSH força a ida das informações para o arquivo, assegurando que uma falha no sistema operacional não resulte em saída perdida. O valor padrão é TRUE.
Nota: O desempenho poderá ser afetado com a freqüência de acesso ao arquivo.
TRACE ENABLED true | false Determina se o rastreamento está ativado ou desativado. Se TRACE ENABLED não estiver presente, o valor padrão será FALSE.
TRACE FILE file name Coloca a saída do arquivo de rastreamento no arquivo especificado. Este arquivo é truncado toda vez que você inicia o rastreamento, a não ser que a anexação tenha sido especificada (consulte TRACE APPEND). Se o parâmetro TRACE_FILE estiver ausente, o arquivo de rastreamento padrão, sql_trc.log, será criado no diretório atual.
TRACE FILE APPEND true | false Quando TRUE é passado, todo arquivo de rastreamento existente é anexado; se FALSE for passado, todo arquivo existente será sobreposto. Em qualquer um dos casos, o arquivo de rastreamento será criado se ele ainda não existir. O padrão é FALSE.
TRACE INDENT INCR integer Controla o número de espaços utilizados para recuar blocos encadeados. O padrão é quatro espaços.
TRACE MAX LINE LENGTH integer Define o comprimento máximo da linha no arquivo de rastreamento de saída antes do reinício cíclico ocorrer. O Padrão é 2000000000, que desativa efetivamente o reinício cíclico.
TRACE MAX NUM FETCHES integer Define o número de linhas resultantes registradas no arquivo de registro. Este também é o número de execuções registradas ao utilizar a combinação SQLPrepare/SQLExecute. O padrão é 3.
TRACE MAX PARAMETER SIZE integer | ALL | NONE Define a quantidade de dados, em bytes por coluna, que sai no arquivo de registro para resultados retornados de comandos SQL. Se você especificar ALL, a instrução inteira será sempre gravada. Se você especificar NONE, o rastreamento dos dados das colunas será desativado e nenhum resultado será registrado. Se especificar 0, os nomes das colunas aparecerão no log, mas nenhum dado será registrado.
O valor padrão para TRACE MAX PARAMETER SIZE é 256 bytes.
TRACE MAX STATEMENT SIZE integer | ALL Define o limite no tamanho de saída registrado no arquivo de registro. Se você especificar ALL, a instrução inteira será registrada sem truncamento. O padrão é 1024 bytes.
TRACE MSG Texto da Mensagem Coloca o texto de mensagem no arquivo do registro de rastreamento.
TRACE SEPARATOR string Permite que uma cadeia especificada pelo usuário seja utilizada, em vez do "==>" padrão. Utilize isto para localizar um bloco na saída de rastreamento rapidamente.
TRACE START TIMER timer name [/i=indent_spaces] [/a=milliseconds] [/q] Inicia um temporizador com o identificador exclusivo fornecido. Isso é exibido no arquivo de registro para fornecer um ponto de referência. O parâmetro /i controla o Nível de Recuo (número de espaços) para registrar eventos durante o intervalo de tempo. O padrão para /i é 0.
O parâmetro /a (opcional) permite um limite superior no intervalo de tempo antes de fornecer um alerta.
O parâmetro /q (opcional) é utilizado para saída do modo de inibição, sem saída para o arquivo de registro. Quando /q está ausente, a saída é registrada em um arquivo normalmente.
Nota: Um TRACE_START_TIMER implícito é chamado com a inicialização de SQL.
TRACE STATEMENTS   Esta é a lista de tipos de instruções a serem registradas, cada uma separada por um sinal de mais (+). Para desativar efetivamente o registro, defina o sinalizador como NONE. O padrão é ALL.
TRACE STOP TIMER timer name Termina a sessão de sincronização iniciada com a chamada correspondente para TRACE_START_TIMER. (O nome exclusivo do temporizador é correspondido sem fazer distinção entre maiúsculas/minúsculas.)
Quando a sessão de sincronização termina, o nível de recuo é redefinido e os resultados da sincronização são registrados, a não ser que /q (quiet) tenha sido utilizado (em TRACE START TIMER) para suprimir a saída para o arquivo de registro.
Nota: Um TRACE STOP TIMER implícito é chamado com o encerramento de SQL (SQLCloseAll ou término de programa).
WRITE LAST ERROR MSG file_name Grava a última mensagem de erro DBMS no file_name. Não grava mensagens de erro geradas pelo Tivoli Service Desk Developer's Toolkit (por exemplo, INVALID CURSOR HANDLE).

Parâmetros de Rastreamento SQL Configuráveis pelo Ambiente

Você pode definir um subconjunto das opções de rastreamento com as variáveis de ambiente SAISQLTRCFILE e SAISQLTRCENABLED.

SAISQLTRCFILE define o nome do arquivo de rastreamento. Por exemplo, para definir esta variável de ambiente a partir da linha de comandos, você pode digitar:

SET SAISQLTRCFILE=c:\trc\trc.log.

SAISQLTRCENABLED ativa ou desativa o rastreamento de SQL. Por exemplo, para definir esta variável de ambiente a partir da linha de comandos, você pode digitar:

SET SAISQLTRCENABLED=TRUE.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test:INTEGER IS
VARIABLES
connectionHandle, retCd, dbms, module, caseSensitive,
 caseConvert: INTEGER;
 ACTIONS
(*conectar com a origem dos dados*)
retCd := SQLCommand('CONNECT SOURCE=ADV_ORACLE;QUAL=
 EXAV;UID=TIM;');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* obter o identificador de conexão atual*)
connectionHandle := SQLCommand ('GET CURRENT CONNECTION');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* definir a conexão atual*)
ret := SQLCommand ('SET CONNECTION' & connectionHandle);
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(*desconectar-se da conexão atual*)
retCd := SQLCommand ('DISCONNECT');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(*desconectar-se de uma conexão especificada*)
retCd := SQLCommand ('DISCONNECT' & connectionHandle);
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* obter o tipo DBMS atual*)
dbms := SQLCommand ('GET DBMS');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* obter o tipo DBMS de uma origem dos dados específica *)
dbms := SQLCommand ('GET DBMS TEST');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* obter o tipo de módulo SAI_SQL.DLL *)
module := SQLCommand ('GET MODULE');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* ver se o DBMS faz distinção ou não entre maiúsculas e minúsculas *)
caseSensitive := SQLCommand ('GET CASE SENSITIVITY');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* obter o modo de conversão de maiúsculas e minúsculas atual*)
caseConvert := SQLCommand ('GET CASE CONVERSION');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* definir o modo de conversão de maiúsculas e minúsculas atual para a conexão atual *)
ret := SQLCommand ('SET CASE CONVERSION upper');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* salvar o qualificador atual para a conexão atual *)
ret := SQLCommand ('SAVE CURRENT QUALIFIER');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* obter o formato de data para o ADVISOR nomeado *)
ret := SQLCommand('GET DATE FORMAT ADVISOR');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* obter o formato de hora da origem na qual eu estou conectado atualmente *)
ret := SQLCommand('GET TIME FORMAT');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* definir o qualificador atual para a conexão atual *)
ret := SQLCommand('SET CURRENT QUALIFIER Fred');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* restaurar o qualificador atual para a conexão atual *)
ret := SQLCommand('RESTORE CURRENT QUALIFIER');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
(* alternar bancos de dados *)
ret := SQLCommand('START USING DATABASE advisor');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
END; --Test--

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também

Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script para obter informações sobre o seguinte:


SQLCommit

Descrição

Emite um comando SQL Commit Work para o interpretador de SQL, aceitando, assim, todas as alterações feitas durante esta transação.

Sintaxe

FUNCTION SQLCommit: INTEGER;

Atenção

Se uma instrução preparada não indicar um cursor aberto, uma consolidação fará com que essa instrução seja fechada. Você deve fechar manualmente qualquer instrução preparada antes de executar uma consolidação.

A maioria dos drivers não permite a especificação de cursores que possam estender unidades de trabalho (por exemplo, declará-las WITH HOLD). Uma exceção é o driver CLI do DB2. Depois de uma operação de consolidação, todos os cursores são fechados. Portanto, se você executar operações SQL (tais como atualizações) em um loop de busca, a consolidação automática deverá ser desativada após cada instrução SQL.

Nota: Você deve fechar todos os cursores antes de executar uma operação de consolidação ou de remoção de alterações.

Notas

Em geral, o TSD Script consolida cada instrução SQL na sua conclusão. Ao executar um grupo de instruções SQL dentro de uma transação, no entanto, você deve consolidar ou remover as alterações da transação manualmente com SQLCommit ou SQLRollBack.

Depois de uma chamada para SQLCommit (ou SQLRollBack), a transação atual termina e a consolidação automática continua. Você deve fazer outra chamada para SQLBeginWork para iniciar outra transação.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER IS
VARIABLES
(* vários *)
  retCd: INTEGER;
 ACTIONS
 (* inicia uma transação *)
  SQLBeginWork;
 (* excluir todos os empregados cuja idade for > idade passada *)
 retCd := SQLDelete('emp','age > ' & age);
   IF retCd < 0 THEN
 SQLRollBack; (* terminar esta transação *)
      EXIT retCd;
              END;
(* consolidar alterações e liberar bloqueios *)
    SQLCommit;
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLCreateSearchString

Descrição

Dado um registro cujos campos contenham critérios de pesquisa, SQLCreateSearchString criará uma cláusula SQL WHERE válida (sem o WHERE).

Sintaxe

FUNCTION SQLCreateSearchString(VAL tableName: STRING,
                               REF searchString: STRING,
                               VAL searchRec: qualquer registro ou
                               lista de qualquer registro): INTEGER;

Atenção

Ao executar uma pesquisa que não faz distinção entre maiúsculas e minúsculas, o TSD Script chamará automaticamente a função Upper apropriada. Na maioria dos casos, a pesquisa não utiliza um índice. Para utilizar índices nas pesquisas, você deve especificar um operador que faça distinção entre maiúsculas e minúsculas.

Notas do Argumento

Nome do Argumento Descrição
tableName A tabela ou exibição de pesquisa
searchString Contém a cadeia de pesquisa que SQLCreateSearchString gera
searchRec Este parâmetro é um registro simples ou uma lista de registros que contém os critérios de pesquisa

Notas

SQLCreateSearchString é utilizado para criar uma cláusula WHERE baseada no conteúdo do registro, ou lista de registros, transmitidos. Se uma lista de registros for transmitida, as cláusulas resultantes de cada elemento da lista serão combinadas com o operador lógico OR. Dentro de um registro, as cláusulas resultantes de cada campo são combinadas com o operador lógico AND.

Observe o seguinte sobre SQLCreateSearchString:


Valores válidos para Campos de Operação

Valor Descrição
(nenhum) Se nenhum operador for especificado na tela de Consulta, será executada uma pesquisa que faça distinção entre maiúsculas e minúsculas. Isso permite o uso de índices.
= Sem distinção de maiúsculas/minúsculas igual (utilizado se o campo do operador não existir ou for $Unknown:database:querying).
> Sem distinção de maiúsculas/minúsculas maior que.
< Sem distinção de maiúsculas/minúsculas menor que.
>= Sem distinção de maiúsculas/minúsculas maior ou igual a.
<= Sem distinção de maiúsculas/minúsculas menor ou igual a.
<> Sem distinção de maiúsculas/minúsculas não igual a.
== Distinção entre maiúsculas e minúsculas igual a.
>> Distinção entre maiúsculas/minúsculas maior que.
<< Distinção entre maiúsculas/minúsculas menor que.
>= Distinção entre maiúsculas/minúsculas maior ou igual a.
<= Distinção entre maiúsculas/minúsculas menor ou igual a.
<<>> Distinção entre maiúsculas/minúsculas não igual a.
IS NULL TRUE se a coluna for NULL atualmente. Ao utilizar o operador IS NULL, o valor do campo de coluna correspondente é irrelevante. No entanto, o campo correspondente à coluna deve estar presente.
IS NOT NULL TRUE se a coluna não for NULL atualmente. Ao utilizar o operador IS NULL, o valor real do campo de coluna correspondente é irrelevante. No entanto, o campo correspondente à coluna deve estar presente.

Valores da Faixa de Campo

Os sufixos _LO e _HI indicam os valores de faixa baixo e alto do campo. Por exemplo, se idade for um campo correspondente a uma coluna da tabela e age_lo for igual a 21 e age_hi for igual a 65, os seguintes critérios de pesquisa serão gerados:

'(age >= 21) AND (age <= 65)'. s:

Ao utilizar os operadores _LO e _HI, o valor do campo de coluna correspondente é irrelevante. No entanto, o campo correspondente à coluna deve estar presente.

Se o campo do operador de faixa _LO ou _HI não existir ou for $Unknown, o recurso de faixa será desativado e o valor do campo de coluna correspondente será utilizado. Se um campo de operador _OP existir e seu valor for <>, os operadores de faixa serão > e <. Caso contrário, os padrões (>= e <=) serão utilizados.

Pesquisas Curinga

Se a coluna for um tipo de cadeia, você poderá executar uma pesquisa curinga utilizando os caracteres curinga * e ?:

Internamente, os caracteres curinga * e ? são convertidos na cláusula LIKE do SQL, compatível com % e _. Se um campo de operador _OP existir e seu valor for <>, então as linhas não correspondentes aos critérios de pesquisa serão selecionadas (isto é, uma cláusula NOT LIKE será gerada).

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test:INTEGER;
PRIVATE
ROUTINES
FUNCTION Test:INTEGER IS
TYPES
SearchRecord IS RECORD
ssn: INTEGER;
 title: STRING;
 title_op: STRING;
  salary: REAL;
 age_lo:integer;
 age_hi:integer;
 age_op:string;
   name :STRING;
 name_lo:string;
 name_hi:string;
 name_op:string;
   age :INTEGER;
  married                      : BOOLEAN;
 MARRIED_OP:STRING;
 rating: REAL;
 addr: STRING;
 addr_OP: STRING;
 bDate: DATE;
 bTime: TIME;
 sysDT: STRING;
 sysDT_op: STRING;
END; (* SearchRecord *)
VARIABLES
r : SearchRecord;
searchString : STRING;
  cursor: SQLCursor;
ret : INTEGER;
 ACTIONS
 (* Esses valores viriam, normalmente, de uma caixa de diálogo personalizada. *)
 r.title_op := '<>';
 r.title := 'PROGRAMMER'; (* ( (title <> 'PROGRAMMER) AND *)
 r.ssn := 315687890; (* (ssn = 316700056) AND *)
 r.name := 'Pamela*'; (* (nome LIKE 'Pamela%') AND *)
 r.name_op := '=='; (* executar uma pesquisa que faça distinção entre maiúsculas e minúsculas*)
 r.age := 30; (* ((idade >= 13) AND (idade <= 49)) AND *)
 r.age_lo := 13;
 r.age_hi := 49;
 r.age_op := '=';
 r.MARRIED_OP := 'is NOT null'; (* (casado IS NOT NULL) AND *)
 r.rating := 43.457; (* (taxa = 43.457) *)
 r.addr := '5051 ?. Morris *'; (* (addr NOT LIKE '5050 _. Morris %') AND *)
 r.bTime := {14,09,16}:TIME; (* (bTime = '14:09:16') AND *)
 r.bDate := {06,26,1985}:DATE; (* (bDate= '06/26/1985') AND *)
 r.sysDT := '1961-10-10-14.09.16.00'; (* (sysDT >= '1961-10-10-14.09.16.00)) *)
 r.sysDT_op := '>=';
 SQLCreateSearchString('emps',searchString,r);
 ret := SQLSelect(cursor, 'emps',searchString);
 IF ret < 0 THEN
 Exit ret;
              END;
 ret := SQLFetch(cursor,r);
 WHILE ret > 0 DO
 (* processar r... *)
 ret := SQLFetch(cursor);
              END;
     SQLCloseCursor(cursor);
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

SQLDelete

Descrição

Exclui uma linha especificada de uma tabela.

Sintaxe

SQLDelete(tableName: STRING,
          queryString: STRING [,expressionList...]):
INTEGER;

Atenção: Uma vez que uma chamada para SQLDelete pode excluir várias linhas, é importante especificar a cláusula WHERE com muito cuidado.

Notas do Argumento

Nome do Argumento Descrição
tableName O nome da tabela da qual excluir
queryString A cláusula WHERE.
expressionList Esta é uma lista de zero ou mais expressões, cada uma separada por vírgulas. Por exemplo:
3,4, idade + 100, nome, 'Fred', Sin(45), ...

Notas

A palavra-chave WHERE na cadeia de consulta é opcional.

SQLDelete permite a substituição do marcador de parâmetro. Para utilizar marcadores de parâmetros, insira um ponto de interrogação (?) na cadeia da instrução. Isso serve como um marcador para um valor a ser substituído mais tarde.

O valor vem da lista de expressões opcionais que seguem a cadeia de instruções. O número de expressões deve corresponder ao número de marcadores de parâmetros (?) e a ordem das expressões deve corresponder à dos marcadores.

O Tivoli Service Desk Developer's Toolkit não consegue fornecer verificação robusta com os marcadores do parâmetros. Por exemplo:

retCd = SQLDelete('emp','WHERE name = ?',name);

A cadeia contida no nome da variável não tem que vir entre aspas simples. Não é necessário utilizar variáveis. Por exemplo:

retCd = SQLDelete('emp','WHERE name = ?','Smith');

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF AGE: INTEGER):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF AGE: INTEGER):INTEGER IS
VARIABLES
  retCd: INTEGER;
 ACTIONS
(* excluir todos os empregados de Indiana, cuja idade for maior que *)
(* a idade passada nesta função. *)
retCd := SQLDelete('emp','(state = ''IN'') AND (age >> ' & age & ')');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLDeleteCurrent

Descrição

Exclui a linha na posição atual do cursor.

Sintaxe

SQLDeleteCurrent(cursor: SQLCURSOR): INTEGER;

Notas do Argumento

Nome do Argumento Descrição
cursor O cursor deve ser aberto anteriormente por uma chamada a SQLSelect

Notas

SQLDeleteCurrent só é suportado no driver CLI do DB2.

Mesmo se você não atualizar, a cláusula FOR UPDATE OF deverá ser utilizada em SQLSelect quando você excluir uma linha. O interpretador de SQL aplica, em seguida, os bloqueios apropriadamente. Se nenhuma cláusula FOR UPDATE OF for fornecida, a seleção será tratada como somente de leitura.

Ao contrário de SQLUpdateCurrent, onde cada coluna atualizada deve ser especificada na cláusula FOR UPDATE OF, será suficiente especificar somente uma coluna ao utilizar SQLDeleteCurrent. Pelo menos uma coluna válida deve ser especificada; não é possível utilizar *.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER IS
VARIABLES
(* colunas *)
   name :STRING;
(* vários *)
  cursor: SQLCursor;
  retCd: INTEGER;
 ACTIONS
SQLBeginWork
(* selecionar todos os empregados de Indiana, cuja idade for maior que *)
(* a idade passada nesta função. *)
retCd := SQLSelect(cursor,'name from emp WHERE (state =
 ''IN'') AND ' & '(idade > ' & idade & ')
 FOR UPDATE OF NAME');
IF (retCd < 0) THEN
 SQLRollBack; (* terminar esta transação *)
      EXIT retCd;
              END;
retCd := SQLFetch(cursor,name);
WHILE (retCd > 0) DO
 (* possivelmente, executar alguma(s) operação(ões) com base no "nome" *)
 (* agora excluir esta linha *)
 retCd := SQLDeleteCurrent(cursor);
IF (retCd < 0) THEN
    SQLCloseCursor(cursor);
 SQLRollback; (* inverter alterações e liberar bloqueios *)
      EXIT retCd;
              END;
 (* obter o registro seguinte *)
 retCd := SQLFetch(cursor);
              END;
     SQLCloseCursor(cursor);
SQLCommit; (* aceitar alterações e liberar bloqueios *)
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também

SQLDelete


SQLExecute

Descrição

Executa uma instrução preparada.

Sintaxe

SQLExecute(statement: STATEMENT [,expressionList...]): INTEGER;

Atenção

Uma operação de remoção de alterações fecha automaticamente todas as instruções e cursores abertos (preparados) (consulte SQLRollBack). Uma operação de consolidação fecha automaticamente todas as instruções abertas que não indicam um cursor aberto.

Nota: Você está limitado a 20 instruções abertas de cada vez.

Notas do Argumento

Nome do Argumento Descrição
statement Esta é a instrução em sua forma preparada, obtida de SQLPrepare.
expressionList Esta é uma lista de zero ou mais expressões, cada uma separada por vírgulas. Por exemplo: 3,4, idade + 100, nome, 'Fred', $Sin(45), ...

Notas

Se você executar um comando várias vezes em um loop, poderá ser mais rápido preparar o comando uma vez, utilizando SQLPrepare e, em seguida, executar a versão preparada no loop, utilizando SQLExecute.

SQLExecute permite a substituição do marcador de parâmetro. Para utilizar marcadores de parâmetros, insira um ponto de interrogação (?) na cadeia da instrução.

Isso serve como um marcador para um valor a ser substituído mais tarde. O valor vem da lista de expressões opcionais que seguem a cadeia de instruções. O número de expressões deve corresponder ao número de marcadores de parâmetros (?) e a ordem das expressões deve corresponder à dos marcadores.

O Tivoli Service Desk Developer's Toolkit não consegue fornecer verificação robusta com os marcadores do parâmetros. Por exemplo:

retCd = SQLPrepare(stmt, 'UPDATE emp SET name= ? WHERE ssn=?);

A cadeia contida no nome da variável não tem que vir entre aspas simples. Não é necessário utilizar variáveis. Por exemplo:

retCd = SQLExecute (stmt, 'Smith', 317689630);

Os marcadores de parâmetros permitem que você execute certas operações (como esta atualização) em loops concisos, utilizando a combinação SQLPrepare/SQLExecute eficiente, em vez de SQLUpdate, SQLExecuteImmediate e outros.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF users: LIST OF STRING):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF users: LIST OF STRING):INTEGER IS
VARIABLES
stmt: SQLStatement;
  retCd: INTEGER;
 ACTIONS
SQLBeginWork; (* iniciar uma transação *)
  (* inserir os nomes de usuários passados *)
retCd := SQLPrepare(stmt,'INSERT INTO USERS VALUES (?)');
IF (retCd < 0) THEN
 SQLRollBack; (* terminar esta transação *)
      EXIT retCd;
              END;
  FOR users DO
    retCd := SQLExecute(stmt,users[$current]);
IF (retCd < 0) THEN
 SQLRollBack; (* inverter alterações e liberar bloqueios *)
      EXIT retCd;
              END;
   END; (* para *)
   SQLCloseStatement(stmt);
SQLCommit; (* aceitar alterações e liberar bloqueios *)
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLExecuteImmediate

Descrição

Executa uma instrução SQL diretamente de sua forma de cadeia.

Sintaxe

SQLExecuteImmediate(sqlCommand: STRING [,expressionList...]): INTEGER;

Notas do Argumento

Nome do Argumento Descrição
sqlCommand Este deve ser um comando (instrução) SQL completo, sintaticamente correto, que pode ser preparado dinamicamente e que não é um comando SELECT.
expressionList Esta é uma lista de zero ou mais expressões, cada uma separada por vírgulas. Por exemplo: 3,4, idade + 100, nome, 'Fred', $Sin(45), ...

Notas

SQLExecuteImmediate permite que você execute quase todos os comandos SQL, exceto os comandos SELECT e comandos que não podem ser preparados dinamicamente.

Se você executar um comando várias vezes em um loop, poderá ser mais rápido preparar o comando uma vez e, em seguida, executar a versão preparada no loop.

As funções internas de manipulação de cadeia do Tivoli Service Desk Developer's Toolkit's podem ser utilizadas para ajudá-lo a criar a cadeia de comandos.

O Tivoli Service Desk Developer's Toolkit não executa expansão de qualificação em SQLExecuteImmediate. Ainda é possível utilizar $QUAL e $SYSQUAL.

Nota: SQLExecuteImmediate permite a substituição do marcador de parâmetros.

Para utilizar marcadores de parâmetros, insira um ponto de interrogação (?) na cadeia da instrução. Isso serve como um marcador para um valor a ser substituído mais tarde. O valor vem da lista de expressões opcionais que seguem a cadeia de instruções. O número de expressões deve corresponder ao número de marcadores de parâmetros (?) e a ordem das expressões deve corresponder à dos marcadores.

O Tivoli Service Desk Developer's Toolkit não consegue fornecer verificação robusta com os marcadores do parâmetros. Por exemplo:

retCd = SQLExecuteImmediate('UPDATE emp SET name = ? WHERE ssn = ?',name,ssn);

A cadeia contida no nome da variável não tem que vir entre aspas simples. Não é necessário utilizar variáveis. Por exemplo:

retCd =SQLExecuteImmediate('UPDATE emp SET name = ? WHERE ssn?','Smith', 316798965);

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test:INTEGER;
PRIVATE
ROUTINES
FUNCTION Test:INTEGER IS
VARIABLES
(* colunas de tabelas de emp *)
sDate: DATE; (* 'inteiro' *)
name: STRING; (* 'char(15)' *)
age: INTEGER; (* 'smallint' *)
ssn: INTEGER; (* 'inteiro' *)
married: BOOLEAN; (* 'smallint' *)
salary: REAL; (* 'flutuante' *)
rating: REAL; (* 'decimal(8,3)' *)
addr: STRING; (* 'varchar(81)' *)
sp: SPACE; (* 'varchar(2500) *)
lsp: SPACE; (* 'long varchar para dados de bit *)
bDate: DATE; (* 'data' *)
bTime: TIME; (* 'hora' *)
sTime: TIME; (* 'inteiro' *)
sysDT: STRING; (* 'marca de hora' *)
(* vários *)
  retCd: INTEGER;
  s : STRING;
 ACTIONS
 SQLExecuteImmediate('DROP TABLE tsql');
 s := 'CREATE TABLE tsql (name CHAR(15), ' &
 'idade SMALLINT, ' &
 'casado SMALLINT, ' &
 'ssn INTEGER, ' &
 'salário FLOAT, ' &
 'taxa DECIMAL(8,3), ' &
 'addr VARCHAR(81), ' &
 'sp VARCHAR(2500), ' &
 'lsp LONG VARCHAR FOR BIT DATA, ' &
 'bdate DATE, ' &
 'btime TIME, ' &
 'sdate INTEGER, ' &
 'stime INTEGER, ' &
 'sysDT TIMESTAMP) ' &
 'PRIMARY KEY(ssn))';
 retCd := SQLExecuteImmediate(s);
       EXIT retCd;
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também

Consulte a documentação SQL para obter informações adicionais.


SQLFetch

Descrição

Busca a próxima linha do cursor nos parâmetros especificados.

Sintaxe

SQLFetch(cursor: SQLCURSOR [,parameterList...]): INTEGER;

Atenção: Se você utilizar a otimização de busca pré-inicializada, deverá assegurar que os parâmetros (variáveis das colunas) listados na primeira (de inicialização) busca ainda estejam visíveis quando as buscas subseqüentes (inicializadas) forem executadas. Esse é sempre o caso quando a busca de inicialização, os parâmetros e as buscas inicializadas estão todos na mesma função.

Nota: Uma remoção de alterações fecha todos os cursores. Se ocorrer uma remoção de alterações no meio de um loop de busca, a próxima chamada a SQLFetch falhará.

Notas do Argumento

Nome do Argumento Descrição
cursor O cursor deve ser aberto anteriormente por uma chamada a SQLSelect.
parameters Esta é uma lista de zero ou mais parâmetros (variáveis de colunas) delimitados por vírgulas, cujos nomes devem corresponder aos nomes de colunas correspondentes (consulte Notas desta instrução).

Notas

SQLFetch possui duas formas de otimização. A primeira possui todos os parâmetros (variáveis de colunas) listados depois do cursor; a segunda possui somente o cursor. A primeira forma é referida como uma busca de inicialização, uma vez que inicializa o Tivoli Service Desk Developer's Toolkit para permitir inserções rápidas nos parâmetros. A segunda forma assume que os parâmetros a serem buscados são os mesmos daqueles especificados na chamada mais recente a uma busca da primeira forma. Esta segunda forma é chamada a busca inicializada ou pré-inicializada.

Depois do Tivoli Service Desk Developer's Toolkit estar ciente dos parâmetros de busca, ele ficará consideravelmente mais rápido se você não especificar os parâmetros novamente. (Isso faz com que o Tivoli Service Desk Developer's Toolkit reinicialize os parâmetros desnecessariamente.)

Nota: Para obter mais informações sobre como utilizar buscas pré-inicializadas, consulte Atenção nesta instrução.

Como Corresponder Nomes de Parâmetros com Nomes de Colunas

Os nomes de parâmetros devem corresponder aos nomes de colunas respectivos. Todo parâmetro cujo nome não corresponder a um nome de coluna será ignorado. Ocorrerá uma exceção se o nome da coluna começar com SQLColumn_ e terminar com o número da coluna que corresponder à posição na lista de seleção. Com este método, é possível acessar os resultados das funções das colunas (agregados).
Por exemplo, se a cadeia de seleções for

SELECT count(*) FROM emp

e você declarar SQLColumn_1 com uma variável do tipo INTEGER, poderá buscar a contagem com:

SQLFetch(cursor,$SQLColumn_1);

A ordem dos parâmetros $SQLColumn_xx não importa na lista de parâmetros.

Por exemplo, se name for uma coluna de caracteres e age for uma coluna numérica e sua cadeia de seleções for:

SELECT name,age FROM emp

e você declarou as variáveis $SQLColumn_xx como

$SQLColumn_1: STRING; $SQLColumn_2: INTEGER;

então, o seguinte buscará nomes na $SQLColumn_1 e idade na $SQLColumn_2:

SQLFetch(cursor,$SQLColumn_1,$SQLColumn_2);

e:

SQLFetch(cursor,$SQLColumn_2,$SQLColumn_1);

Apesar deste exemplo utilizar STRING e INTEGER, você pode definir qualquer tipo de dado válido de TSD Script para $SQLColumn, exceto LIST ou WINDOWS.

Como Passar Registros como Parâmetros

Você pode passar um registro como um parâmetro. Neste caso, os nomes de campos devem corresponder aos nomes de colunas das tabelas ou serão ignorados.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER IS
VARIABLES
VARIABLES
(* colunas *)
   name :STRING;
(* vários *)
  cursor: SQLCursor;
  retCd: INTEGER;
 ACTIONS
SQLBeginWork; (* iniciar uma transação *)
(* selecionar todos os empregados de Indiana, cuja idade for maior *)
(* que a idade passada nesta função. *)
retCd := SQLSelect(cursor,'name from emp WHERE (state = ''IN'') AND ' &
 '(age > ' & age & ') FOR UPDATE OF NAME');
IF (retCd < 0) THEN
 SQLRollBack; (* terminar a transação *)
      EXIT retCd;
              END;
retCd := SQLFetch(cursor,name);
WHILE (retCd > 0) DO
 (* possivelmente, executar algumas operações com base em "name"
 .
 .
 .
 *)
 (* definir o nome como maiúsculas *)
 name := StrUpper(name);
 (* agora atualizar esta linha *)
 retCd := SQLUpdateCurrent(cursor,name);
IF (retCd < 0) THEN
    SQLCloseCursor(cursor);
 SQLRollback; (* inverter alterações e liberar bloqueios *)
      EXIT retCd;
              END;
 (* obter o registro seguinte *)
 retCd := SQLFetch(cursor);
              END;
    SQLCloseCursor(cursor);
SQLCommit; (* aceitar alterações e liberar bloqueios *)
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLFormat

Descrição

Converte um valor de dados em uma cadeia no formato de dados apropriado para o DBMS no qual você está conectado atualmente.

Sintaxe

SQLFormat(value: SIMPLE EXPRESSION): STRING;

Atenção

Os formatos de data e hora necessários por seu DBMS podem diferir dos formatos de data e hora utilizados para exibição. Por exemplo, o formato de data padrão do Oracle é DD-MON-YY, enquanto o formato de data padrão do Tivoli Service Desk Developer's Toolkit em uma estação de trabalho dos Estados Unidos é MM/DD/YYYY.

Notas do Argumento

Nome do Argumento Descrição
value Deve ser um tipo simples (como DATE ou STRING)

Notas

SQLFormat retorna a cadeia formatada, não um código de retorno, que indica se uma operação foi bem-sucedida. Se o valor passado for $Unknown, a cadeia 'NULL' será retornada. A formatação específica da cadeia depende do tipo da cadeia:

Códigos de Retorno

A cadeia formatada é retornada. Se o valor passado for $Unknown, a cadeia 'NULL' será retornada.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
 FUNCTION GetCount(VAL d: DATE): INTEGER;
PRIVATE
ROUTINES
 FUNCTION GetCount(VAL d: DATE): INTEGER IS
VARIABLES
  retCd: INTEGER;
   cmd : STRING;
   $SQLColumn_1 : INTEGER;
 ACTIONS
 cmd := 'SELECT COUNT(*) FROM COMPANIES WHERE name = ' &
 SQLFormat('a casa de Joe') & ' AND founded_date ' & SQLFormat(d);
   retCd := SQLSelectInto(cmd, $SQLColumn_1);
   IF retCd < 0 THEN
     Exit( retCd );
ELSE
     Exit( $SQLColumn_1 );
              END;
              END;

Consulte também

Para obter mais informações sobre os formatos de data e hora e sobre os formatos inteiro e real, consulte "Sinalizadores de Formatos do Tipo de Dados" no Capítulo 3.

Para obter mais informações sobre o arquivo sai_sql.cfg, consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script.


SQLGetCursorName

Descrição

Obtém o nome do cursor real utilizado internamente pelo Interpretador de SQL para o cursor especificado.

Sintaxe

SQLGetCursorName(cursor: SQLCURSOR, cursorName: STRING):
 INTEGER;

Notas do Argumento

Nome do Argumento Descrição
cursor O cursor deve ser aberto anteriormente por uma chamada a SQLSelect
cursorName O nome do cursor

Notas

SQLGetCursorName só é suportado no driver CLI do DB2.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER IS
VARIABLES
(* colunas *)
   name :STRING;
(* vários *)
  cursor: SQLCursor;
cursorName: STRING;
  retCd: INTEGER;
 ACTIONS
(* selecionar todos os empregados de Indiana, cuja idade for
 maior *)
(* que a idade passada nesta função. *)
retCd := SQLSelect(cursor,'name from emp WHERE (state =
 ''IN'') AND ' & '(idade > ' & idade & ')
 FOR UPDATE OF NAME');
IF (retCd < 0) THEN
      EXIT retCd;
              END;
 SQLGetCursorName(cursor,cursorName);
 retCd := SQLFetch(cursor,name);
WHILE (retCd > 0) DO
 (* possivelmente, executar algumas operações com base em "name" e  "cursorName"
 .
 .
 .
 *)
 (* obter o registro seguinte *)
 retCd := SQLFetch(cursor);
              END;
    SQLCloseCursor(cursor);
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLGetOption

Descrição

Obtém o valor de uma configuração ou opção de estado de contexto.

Sintaxe

SQLGetOption(VAL option: STRING,
             REF optionValue : <ANY SIMPLE VARIABLE>
             [, VAL srcOrConn : <INTEGER OR STRING EXPRESSION>])
             : INTEGER;

Atenção: Ao contrário das opções no arquivo de configuração de SQL (sai_sql.cfg), os nomes das opções passados para SQLGetOption utilizam espaços, não caracteres de sublinhado, para a separação.

Nota: A maioria das opções que podem ser obtidas com SQLGetOption pode ser definida com SQLSetOption.

Notas do Argumento

Nome do Argumento Descrição
option O nome da opção (como: 'DATE FORMAT'). Consulte a seção Notas para obter uma lista completa.
optionValue A variável que é definida com o valor da opção;
srcOrConn Este argumento é opcional e, se fornecido, deverá conter um nome de origem (STRING) ou um identificador de conexão (INTEGER). Se este argumento não for passado, $CURRENT será assumido.

Notas

A função retorna um código de erro de sucesso ou de erro. Os códigos de erro mais comuns são: INVALID_OPTION e NOT_CONNECTED (para aquelas opções que requerem que você esteja conectado, que é o caso da maior parte delas).

Esta função incorpora funcionalidade anterior em SQLCommand ('GET ... '); com a vantagem de ser capaz de retornar dados STRING.

A seguir, opções que podem ser especificadas com este comando:

Opção Descrição
'BIND PARAMETER BUFFER SIZE' Retorna o tamanho do buffer utilizado para ligação de parâmetro.
'BIND PARAMETER FILL OUTPUT NULL VALS' Retornará TRUE se os valores de saídas NULL forem definidos como zero.
'BIND PARAMETER PAD OUTPUT STRINGS' Retornará TRUE se as cadeias dos parâmetros de saída forem preenchidas com espaços em branco com a precisão especificada.
'BOOLEAN FORMAT' Retornará o formato utilizado para armazenar valores Booleanos no DBMS. Consulte o Capítulo 3 deste guia para obter mais informações sobre a formatação de dados.
'BOOLEAN PARAMETER PRECISION' Retorna a precisão utilizada para ligar valores Booleanos.
'BOOLEAN PARAMETER TYPE' Retorna o tipo de dados X/Open utilizado para ligar valores Booleanos.
'BOOLEAN STORAGE TYPE' Retorna o tipo de armazenamento utilizado para representar Booleanos. Os valores possíveis são:
1 - INTEGER
2 - STRING
3 - BOOLEAN
'CASE CONVERSION' Retorna a conversão em maiúsculas e minúsculas utilizada pelo Tivoli Service Desk Developer's Toolkit para nomes de objetos (não se aplica a dados). Os valores possíveis são:
1 - Upper
2 - Lower
3 - None
'CASE SENSITIVITY' Retornará TRUE se o banco de dados possuir nomes de objetos que façam distinção entre maiúsculas e minúsculas (não se aplica à distinção entre maiúsculas e minúsculas de DATA).
'CATALOG CASE CONVERSION' Retorna a conversão em maiúsculas e minúsculas utilizada pelo Tivoli Service Desk Developer's Toolkit para dados nas exibições de catálogos (SAI_SYSCOLUMNS e SAI_SYSTABLES). Os valores possíveis são:
1 - Upper
2 - Lower
3 - None
'CHECK DRIVER' Retornará TRUE se o Tivoli Service Desk Developer's Toolkit executar uma verificação para ver se o driver está listado como não-suportado.
'COLUMN CATALOG METHOD' Retorna o método utilizado pelo Tivoli Service Desk Developer's Toolkit para obter os valores do catálogo de colunas. Os valores possíveis são:
1 - Utilizar o método padrão para consultar o catálogo
de colunas.
2 - Utilizar uma consulta DBMS específica para
o catálogo de colunas.
3 - Utilizar uma função ODBC SQLColumn().
'COMMIT SELECTS' Aplicável se as consolidações manuais forem TRUE. Retorna se as consolidações são ou não executadas depois das unidades de trabalho somente de leitura.
'CONFIG FILE' Retorna o nome do arquivo de configuração utilizado pelo Tivoli Service Desk Developer's Toolkit na conexão. Você não tem que estar conectado para obter este valor.
'CONNECTION' Retorna o identificador de conexão. Esta opção pode ser obtida com SQLGetOption, mas não pode ser definida com SQLSetOption.
'CURRENT COL BUFFER' Retorna o tamanho do buffer da coluna atual.
'CURRENT ROW BUFFER' Retorna o tamanho do buffer da linha atual.
'DATE FORMAT' Retorna o formato de data do DBMS. Consulte o Capítulo 3 deste guia para obter mais informações sobre a formatação de dados.
'DATE PARAMETER PRECISION' Retorna a precisão utilizada para ligar valores de dados.
'DATE PARAMETER TYPE' Retorna o tipo de dados X/Open utilizado para ligar valores de dados.
'DATE STORAGE TYPE' Retorna o tipo de armazenamento utilizado para representar dados. Os valores possíveis são:
1 - INTEGER
2 - STRING
6 - DATE
'DBMS' Retorna o DBMS (número). Os DBMSs reconhecidos atualmente são:
0 - DB2/2, DB2/6000, DB2/NT, DB2/UX
1 - ORACLE
2 - DB2
3 - SQL SERVER 4.x
4 - SYBASE
5 - NETWARE SQL
6 - GUPTAN SQLBASE
7 - XDB
8 - DBASE
9 - BTRIEVE
10 - ASCII TEXT
11 - EXCEL
12 - SYBASE 10 (e acima)
13 - PARADOX
14 - INGRES3
15 - INGRES4
16 - INFORMIX4
17 - INFORMIX5
18 - TANDEM
19 - PROGRESS
20 - HP ALLBASE
21 - WATCOM
22 - FULCRUM
23 - MS SQL SERVER 6.x
24 - (OTHER)
'DBMS STRING' Retorna os seguintes nomes de bancos de dados:
DB2, ORACLE, SQLSERVER, SYBASE ou DBMS_OTHER.
'DSN' Retorna o nome da origem dos dados ODBC atual (somente se conectar-se com uma origem dos dados ODBC).
'HAS TRANSACTIONS' Retornará TRUE se o DBMS suportar transações
'IN TRANSACTION' Retornará TRUE se uma transação tiver sido iniciada com SQLBeginWork e não tiver sido consolidada ou tido as alterações removidas. Esta opção pode ser obtida com SQLGetOption, mas não pode ser definida com SQLSetOption.
'INTEGER FORMAT' Retorna o formato inteiro do DBMS. Consulte o Capítulo 3 deste guia para obter mais informações sobre a formatação de dados.
'INTEGER PARAMETER PRECISION' Retorna a precisão utilizada para ligar valores inteiros.
'INTEGER PARAMETER TYPE' Retorna o tipo de dados X/Open utilizado para ligar valores inteiros.
'INTEGER STORAGE TYPE' Retorna o tipo de armazenamento utilizado para representar inteiros. Os valores possíveis são:
1 - INTEGER
2 - STRING
'LAST ERROR MSG' Retorna o último texto de mensagem de erro do DBMS.
'MANUAL COMMITS' Retornará TRUE se SAI_SQL (em vez do driver) controlar o procedimento da consolidação.
'MAX LITERAL LEN' Retorna o valor do comprimento literal máximo da cadeia após o qual o Tivoli Service Desk Developer's Toolkit executa ligação de parâmetros na inserção e atualização.
'MODULE' Serve para compatibilidade retroativa apenas. Retorna o tipo do módulo. O único valor possível para o Tivoli Service Desk Developer's Toolkit 5.0 é 5 (X/Open).
'MODULE TYPE' Serve para compatibilidade retroativa apenas. Retorna o tipo do módulo. O único valor possível para o Tivoli Service Desk Developer's Toolkit 5.0 é 5 (X/Open).
'MULTI CONNECT' Retornará TRUE se o DBMS suportar conexões múltiplas de um processo cliente.
'MULTI CONNECT REQUIRED' Retornará TRUE se o DBMS requerer conexões múltiplas para atender várias instruções SQL simultâneas, ("encadeadas").
'NEEDS CODEPAGE TRANSLATION' Retornará TRUE se o Tivoli Service Desk Developer's Toolkit tiver que executar as conversões de página de códigos ANSI em OEM e OEM em ANSI (somente no Windows).
'PROCESS RESULTS ON FREESTMT' Retornará TRUE se o Tivoli Service Desk Developer's Toolkit garantir esvaziamento completo de resultados através de busca, até que nenhuma linha mais seja retornada.
'QUAL' Retorna o qualificador (em geral, o criador ou o proprietário) utilizado para acessar as tabelas de dados.
'REAL FORMAT' Retorna o formato de número real do DBMS. Consulte o Capítulo 3 deste guia para obter mais informações sobre a formatação de dados.
'REAL PARAMETER PRECISION' Retorna a precisão utilizada para ligar valores reais.
'REAL PARAMETER SCALE' Retorna a escala utilizada para ligar valores reais.
'REAL PARAMETER TYPE' Retorna o tipo de dados X/Open utilizado para ligar valores reais.
'REAL STORAGE TYPE' Retorna o tipo de armazenamento utilizado para representar reais. Os valores possíveis são:
2 - STRING
3 - REAL
'SHOW WARNINGS' Retornará TRUE se as caixas de mensagens de aviso forem exibidas.
'SOURCE' Retorna o nome da origem dos dados SAI_SQL conectada atualmente.
'STRING FORMAT' Retorna o formato de cadeia do DBMS. Consulte o Capítulo 3 deste guia para obter mais informações sobre a formatação de dados.
'STRING PARAMETER PRECISION' Retorna a precisão utilizada para ligar valores de cadeia.
'STRING PARAMETER TYPE' Retorna o tipo de dados X/Open utilizado para ligar valores de cadeia.
'SYSQUAL' Retorna o qualificador necessário para acessar as tabelas do catálogo de sistema.
Nota: O Tivoli Service Desk Developer's Toolkit versões 4.1.0 e acima utilizam exibições de reiniciadores cíclicos criados pelo SAI para informações de catálogos onde SYSQUAL é utilizado para criar exibições (isto é, EXAV), não o qualificador de sistema normal (isto é, SYSIBM).
'TABLE CATALOG METHOD' Retorna o método utilizado pelo Tivoli Service Desk Developer's Toolkit para obter os valores do catálogo de tabelas. Os valores possíveis são:
1 - Utilizar o método padrão para consultar o catálogo
de colunas.
2 - Utilizar uma consulta DBMS específica para o catálogo
de colunas.
3 - Utilizar uma função ODBC SQLTable().
'TIME FORMAT' Retorna o formato de hora do DBMS. Consulte o Capítulo 3 deste guia para obter mais informações sobre a formatação de dados.
'TIME PARAMETER PRECISION' Retorna a precisão utilizada para ligar valores de hora.
'TIME PARAMETER TYPE' Retorna o tipo de dados X/Open utilizado para ligar valores de hora.
'TIME STORAGE TYPE' Retorna o tipo de armazenamento utilizado para representar horas. Os valores possíveis são:
1 - INTEGER
2 - STRING
5 - TIME
'TRACE ALERT DESTINATION' Retorna o nome do arquivo de alerta (se alertas estiverem sendo utilizados).
'TRACE APPEND' Retornará TRUE se o arquivo de rastreamento tiver que ser anexado (em vez de sobreposto) todas as vezes.
'TRACE AUTO FLUSH' Retornará TRUE se a saída de rastreamento for esvaziada no arquivo de rastreamento depois de cada gravação.
'TRACE ENABLED' Retornará TRUE se o rastreamento estiver ativado.
'TRACE FILE' Retorna o nome do arquivo de saída de rastreamento.
'TRACE INDENT INCR' Retorna o incremento de recuo sendo utilizado.
'TRACE MAX LINE LENGTH' Retorna o comprimento máximo da linha após o qual ocorre o reinício cíclico.
'TRACE NUM EXECUTES' Retorna o número máximo de instruções loggedSQLFetch e SQLExecute.
'TRACE PARAM SIZE' Retorna o comprimento máximo para parâmetros que são gravados no arquivo.
'TRACE SEPARATOR' Retorna o separador da saída de rastreamento sendo utilizado.
'TRACE STATEMENT SIZE' Retorna o comprimento máximo para instruções que são gravadas no arquivo.
'TRACE STATEMENTS' Retorna a máscara de bits de instruções que estão sendo rastreadas atualmente.
'TRANSLATE FUNC' Retorna o nome da função de maiúsculas para o DBMS.
'UPDATE LOCK COLUMN' Retorna a coluna (nome) utilizada para o bloqueio da concorrência passiva (em geral, MODIFY_DATETIME).
'UPDATE LOCK ERROR FILTER' Retorna o nível do filtro de erros utilizado enquanto o bloqueio de atualização da concorrência passiva é executado. Os valores possíveis são:
0 - Fatal (o padrão)
1 - Erro
2 - Aviso
3 - Informativo
'UPDATE LOCK STYLE' Retorna o estilo de bloqueio utilizado para as atualizações de concorrência passiva. Os valores possíveis são:
1 - SELECT FOR UPDATE
2 - UPDATE
3 - UPDATE CONDITIONAL
'UPDATE MODE' Retorna o modo de atualização da concorrência passiva (algoritmo). Os valores possíveis são:
1 - SELECT
2 - DBMS OPTIMISTIC
3 - NONE

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Exemplos

 Exemplo de KNOWLEDGEBASE;
 --PUBLIC
ROUTINES
 PROCEDURE Example;
PRIVATE
ROUTINES
 PROCEDURE Example IS
VARIABLES
  retCd: INTEGER;
 dateFormat : INTEGER;
 lastErrorMsg : STRING;
 hConn : INTEGER;
 ACTIONS
 retCd := SQLGetOption('LAST ERROR MSG' lastErrorMsg);
 retCd := SQLGetOption('DATE FORMAT', dateFormat,
 'ADVISOR');
 retCd := SQLGetOption('CONNECTION', hConn);
 retCd := SQLGetOption('DATE FORMAT', dateFormat, hConn);
              END;

Consulte também


SQLInsert

Descrição

Insere uma nova linha na tabela especificada.

Sintaxe

SQLInsert(tableName: STRING [,parameters...]): INTEGER;

Notas do Argumento

Nome do Argumento Descrição
tableName O nome da tabela na qual você está inserindo.
parameters Esta é uma lista de zero ou mais parâmetros (variáveis de colunas) delimitados por vírgulas, cujos nomes devem corresponder aos nomes de colunas correspondentes (consulte as Notas desta instrução para obter mais informações).

Notas

Os parâmetros (variáveis de colunas) passados para SQLInsert devem ter o mesmo nome das colunas reais da tabela. Se o nome de um parâmetro não corresponder a nenhum nome de coluna, o parâmetro será ignorado.

Nota: Não é necessário passar parâmetros para todas as colunas da tabela, apenas para aquelas criadas como NOT NULL.

Não tente inserir um parâmetro do Tivoli Service Desk Developer's Toolkit, cujo valor seja $Unknown, em uma tabela onde a coluna correspondente tenha sido criada com a opção NOT NULL. Você pode passar um registro como um parâmetro. Neste caso, os nomes de campos devem corresponder aos nomes de colunas das tabelas ou serão ignorados.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test:INTEGER;
PRIVATE
ROUTINES
FUNCTION Test:INTEGER IS
VARIABLES
(* nomes de colunas *)
   name :STRING;
ssn: INTEGER;
(* vários *)
  retCd: INTEGER;
 ACTIONS
(* definir os valores das colunas *)
name := 'Fred';
ssn := 316768990;
(* inserir nova linha *)
retCd := SQLInsert('emp',name,ssn);
IF (retCd < 0) THEN
      EXIT retCd;
              END;
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLPrepare

Descrição

SQLPrepare prepara uma cadeia de comandos SQL para execução posterior. Esta cadeia de comandos, depois de preparada, é chamada de instrução preparada. Se a operação SQLPrepare obtiver êxito, a variável passada como parâmetro da instrução conterá um identificador de instrução válido.

Sintaxe

SQLPrepare(statement: SQLSTATEMENT, sqlCommand: STRING):
INTEGER;

Atenção

Uma operação de remoção de alterações fecha automaticamente todas as instruções e cursores abertos (preparados). Uma operação de consolidação fecha automaticamente todas as instruções abertas que não indicam um cursor aberto declarado WITH HOLD (consulte SQLCommit).

Notas do Argumento

Nome do Argumento Descrição
statement O identificador de instrução utilizado na instrução SQLExecute subseqüente
sqlCommand Esta é uma instrução SQL completa, sintaticamente correta

Notas

SQLPrepare permite que você prepare quase todos os comandos SQL, exceto os comandos SELECT e comandos que não podem ser preparados dinamicamente.

Se você executar um comando (tal como SQLDelete) várias vezes em um loop, será mais rápido preparar o comando uma vez e executar a versão preparada com SQLExecute, que executar o comando diretamente todas as vezes.

Nota:As funções internas de manipulação de cadeia do Tivoli Service Desk Developer's Toolkit's podem ser utilizadas para ajudá-lo a criar a cadeia de comandos a ser preparada.

O Tivoli Service Desk Developer's Toolkit não executa expansão de qualificação em SQLPrepare. No entanto, ainda é possível utilizar $QUAL e $SYSQUAL.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF users: LIST OF STRING):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF users: LIST OF STRING):INTEGER IS
VARIABLES
stmt: SQLStatement;
  retCd: INTEGER;
 ACTIONS
SQLBeginWork; (* iniciar uma transação *)
   (* inserir os nomes de usuários passados *)
retCd := SQLPrepare(stmt,'INSERT INTO USERS VALUES (?)');
IF (retCd < 0) THEN
 SQLRollBack; (* terminar a transação *)
      EXIT retCd;
              END;
   FOR users DO
    retCd := SQLExecute(stmt,users[$current]);
IF (retCd < 0) THEN
 SQLRollBack; (* inverter alterações e liberar bloqueios *)
      EXIT retCd;
              END;
   END; (* para *)
   SQLCloseStatement(stmt);
SQLCommit; (* aceitar alterações e liberar bloqueios *)
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também

Para obter informações adicionais, consulte a documentação de SQL.


SQLRollBack

Descrição

Emite um comando ROLLBACK WORK para o interpretador de SQL, invertendo/desfazendo assim, todas as alterações feitas durante esta transação.

Sintaxe

FUNCTION SQLRollBack: INTEGER;

Atenção: Uma remoção de alterações faz com que todos os cursores abertos e instruções preparadas sejam fechados automaticamente.

Notas

SQLRollBack termina a transação atual. Você deverá chamar SQLBeginWork novamente se desejar que outra transação seja iniciada; caso contrário, o TSD Script continuará a consolidação automática de cada instrução SQL.

Utilize SQLRollBack para inverter transações pequenas, falhas, que não envolvam entrada do usuário. Evite utilizar a remoção de alterações como um método de eliminação genérica para operações de interface com o usuário.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF ssnList: LIST OF INTEGER):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF ssnList: LIST OF INTEGER):INTEGER IS
VARIABLES
(* vários *)
  retCd: INTEGER;
 ACTIONS
(* Iniciar uma transação lógica *)
  SQLBeginWork;
(* excluir todos os empregados cujos ssn estejam na lista de ssn passada *)
FOR ssnList DO
 retCd := SQLDelete('emp','ssn = ' & ssnList[$CURRENT]);
   IF retCd < 0 THEN
 SQLRollBack; (* inverter alterações e liberar bloqueios *)
      EXIT retCd;
              END;
              END;
(* consolidar alterações e liberar bloqueios *)
    SQLCommit;
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLSelect

Descrição

Abre um cursor com base nas linhas especificadas para busca posterior por SQLFetch.

Sintaxe

SQLSelect(cursor: SQLCURSOR,
 queryString: STRING [,expressionList...]): INTEGER;

Atenção

Você está limitado a 20 cursores abertos de cada vez.

Uma operação de remoção de alterações fecha automaticamente todos os cursores.

A maioria dos drivers não permite a especificação de cursores que possam estender unidades de trabalho (por exemplo, declará-las WITH HOLD). Uma exceção é o driver CLI do DB2. Depois de uma operação de consolidação, todos os cursores são fechados. Portanto, se você executar operações SQL (tais como atualizações) em um loop de busca, a consolidação automática deverá ser desativada após cada instrução SQL.

Nota: Você deve fechar todos os cursores antes de executar uma operação de consolidação ou de remoção de alterações.

Notas do Argumento

Nome do Argumento Descrição
cursor O identificador de cursor da consulta.
queryString Esta é a cadeia de seleções. Ela deve estar completa e sintaticamente correta.
expressionList... Esta é uma lista de zero ou mais expressões, cada uma separada por vírgulas. Por exemplo:
 3,4, idade + 100, nome, 'Fred', $Sin(45), ...

Notas

Se você atualizar ou eliminar qualquer linha buscada, deverá utilizar uma cláusula FOR UPDATE OF para que suas intenções fiquem mais claras para o interpretador de SQL. Isto será necessário se você desejar executar uma SQLUpdateCurrent mais tarde.

Também será uma boa prática se você utilizar SQLDeleteCurrent. Se uma cláusula FOR UPDATE OF não for utilizada, a seleção será tratada como somente de leitura.

Nota: Para cadeias de seleções simples, (como o exemplo), a palavra-chave SELECT é opcional.

SQLSelect permite a substituição do marcador de parâmetros. Para utilizar marcadores de parâmetros, insira um ponto de interrogação (?) na cadeia da instrução. Isso serve como um marcador para um valor a ser substituído mais tarde. O valor vem da lista de expressões opcionais que seguem a cadeia de instruções. O número de expressões deve corresponder ao número de marcadores de parâmetros (?) e a ordem das expressões deve corresponder à dos marcadores.

O Tivoli Service Desk Developer's Toolkit não consegue fornecer verificação robusta com os marcadores do parâmetros. Por exemplo:

retCd = SQLSelect(cursor,'SELECT * FROM emp WHERE name = ?',name);

A cadeia contida no nome da variável não tem que utilizar aspas simples. Não é necessário utilizar variáveis. Por exemplo:

retCd = SQLSelect(cursor,'SELECT * FROM emp WHERE name = ?', 'Smith');

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER IS
VARIABLES
(* colunas *)
   name :STRING;
(* vários *)
  cursor: SQLCursor;
  retCd: INTEGER;
 ACTIONS
SQLBeginTran; (* iniciar uma transação *)
(* selecionar todos os empregados de Indiana, cuja idade for *)
(* maior que a idade passada nesta função. *)
retCd := SQLSelect(cursor,'SELECT name from emp WHERE
 (state = ''IN'') AND ' & '(idade > ' & idade & ') FOR UPDATE OF NAME');
IF (retCd < 0) THEN
 SQLRollBack; (* terminar a transação *)
      EXIT retCd;
              END;
retCd := SQLFetch(cursor,name);
WHILE (retCd > 0) DO
 (* possivelmente, executar algumas operações com base em "name"
 .
 .
 .
 *)
 (* definir o nome como maiúsculas *)
 name := StrUpper(name);
 (* agora atualizar esta linha *)
 retCd := SQLUpdateCurrent(cursor,name);
IF (retCd < 0) THEN
    SQLCloseCursor(cursor);
 SQLRollBack; (* inverter alterações e liberar bloqueios *)
      EXIT retCd;
              END;
 (* obter o registro seguinte *)
 retCd := SQLFetch(cursor);
              END;
    SQLCloseCursor(cursor);
SQLCommit; (* aceitar alterações e liberar bloqueios *)
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLSelectInto

Descrição

Seleciona e busca a linha especificada nos parâmetros (variáveis de colunas).

Sintaxe

SQLSelectInto(queryString: STRING [,parameters...]):
INTEGER;

Notas do Argumento

Nome do Argumento Descrição
queryString Esta é a cadeia de seleções. Ela deve estar completa e sintaticamente correta.
parameters Esta é uma lista de zero ou mais parâmetros (variáveis de colunas) delimitados por vírgulas, cujos nomes devem corresponder aos nomes de colunas correspondentes.
Consulte a seção Notas para obter informações adicionais.

Notas

SQLSelectInto é equivalente à seguinte seqüência de código:

SQLSelect SQLFetch SQLCloseCursor.

Portanto, se a consulta de seleção especificar mais de uma linha, somente a primeira linha será buscada.

Se você atualizar ou eliminar qualquer linha buscada, utilize uma cláusula FOR UPDATE OF para que suas intenções fiquem mais claras para o interpretador de SQL. Se uma cláusula FOR UPDATE OF não for utilizada, a seleção será tratada como somente de leitura.

Como Corresponder Nomes de Parâmetros com Nomes de Colunas

Os nomes de parâmetros devem corresponder aos nomes de colunas respectivos. Todo parâmetro cujo nome não corresponder a um nome de coluna será ignorado. Ocorrerá uma exceção se o nome da coluna começar com SQLColumn_ e terminar com o número da coluna que corresponder à posição na lista de seleção. Com este método, é possível acessar os resultados das funções das colunas (agregados).

Por exemplo, se você declarar SQLColumn_1 com uma variável (inteiro), poderá buscar a contagem com

SQLSelectInto('SELECT count(*) from emp',$SQLColumn_1);

A ordem dos parâmetros $SQLColumn_xx não importa na lista de parâmetros. Por exemplo, se name for uma coluna de caracteres e age for uma coluna numérica e você declarou as variáveis $SQLColumn_xx como:

$SQLColumn_1: STRING; $SQLColumn_2: INTEGER;

então, o seguinte buscaria nome na $SQLColumn_1 e idade na $SQLColumn_2:

SQLSelectInto('name,age FROM emp',$SQLColumn_1,$SQLColumn_2);

e:

SQLSelectInto('name,age FROM emp',$SQLColumn_2,$SQLColumn_1);


Para cadeias de seleções simples, como o exemplo, a palavra-chave SELECT é opcional. Você pode passar um registro como parâmetro; neste caso, os nomes de campos devem corresponder aos nomes de colunas das tabelas ou serão ignorados.

Se você passar dois registros do mesmo tipo, SQLSelectInto preencherá os dois. Isso economiza uma etapa de atribuição ao utilizar a concorrência passiva.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test:INTEGER;
PRIVATE
ROUTINES
FUNCTION Test:INTEGER IS
VARIABLES
(* colunas *)
   name :STRING;
ssn: INTEGER;
   age :INTEGER;
(* vários *)
  retCd: INTEGER;
 ACTIONS
(* selecionar todos os empregados de Indiana *)
retCd := SQLSelectInto('SELECT * from emp WHERE state = ''IN''',
 name, age, ssn);
IF (retCd < 0) THEN
      EXIT retCd;
              END;
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLSetOption

Descrição

Define o valor de uma configuração ou opção de estado de contexto.

Sintaxe

SQLSetOption(VAL option: STRING,
             VAL optionValue:<ANY SIMPLE VARIABLE>
             [,VAL srcOrConn : <INTEGER OR STRING
             EXPRESSION>
                    ): INTEGER;

Atenção

Os nomes de opções passados a SQLGetOption utilizam espaços, não sublinhados, para a separação, ao contrário das opções no arquivo de configuração de SQL (sai_sql.cfg).

Todas as opções com SQLGetOption não podem ser definidas com SQLSetOption. Consulte a entrada de SQLGetOption para obter uma lista completa de opções válidas e uma especificação para saber se elas podem ser alteradas com SQLSetOption.

Notas do Argumento

Nome do Argumento Descrição
option O nome da opção, como 'DATE FORMAT'
optionValue O valor da opção a ser definida.
srcOrConn Este argumento é opcional e, se fornecido, deverá conter um nome de origem (STRING) ou um identificador de conexão (INTEGER). Se este argumento não for passado, $CURRENT será assumido.

Nota: Ao contrário de SQLGetOption, o Tivoli Service Desk Developer's Toolkit não suporta este argumento atualmente; se algum for fornecido, será ignorado.

Notas

A função retorna um código de erro de sucesso ou de erro. Os códigos de erro mais comuns são: INVALID_OPTION e NOT_CONNECTED (para aquelas opções que requerem que você esteja conectado, que é o caso da maior parte delas).

Esta função incorpora a maior parte da funcionalidade encontrada anteriormente em SQLCommand('SET ... '). Informações adicionais sobre cada parâmetro (incluindo padrões) são encontradas através da chamada de auxílio para o parâmetro, dentro do editor de configuração de SQL. Com poucas exceções, os parâmetros com SQLGetOption podem ser definidos com SQLSetOption. Consulte SQLGetOption para obter uma lista de opções disponíveis (as opções que não podem ser definidas também são discutidas).

Exemplo

Exemplo de KNOWLEDGEBASE;
 --PUBLIC
ROUTINES
  PROCEDURE Example;
 PRIVATE
ROUTINES
 PROCEDURE Example IS
VARIABLES
  retCd: INTEGER;
 ACTIONS
 retCd := SQLSetOption('CASE CONVERSION', 2);
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLUpdate

Descrição

Atualiza a linha especificada com os valores contidos nos parâmetros (variáveis de colunas).

Sintaxe

SQLUpdate(tableName: STRING, queryString: STRING,
 parameters...]
 [,originalParameters...]): INTEGER;

Atenção: Uma vez que uma chamada para SQLUpdate pode atualizar várias linhas, é importante especificar a condição de sua consulta com muito cuidado.

Notas do Argumento

Nome do Argumento Descrição
tableName O nome da tabela ou exibição a ser atualizada.
queryString A cláusula WHERE.
parameter Esta é uma lista de um ou mais parâmetros (variáveis de colunas) delimitados por vírgulas, cujos nomes devem corresponder aos nomes de colunas correspondentes.
Consulte Notas desta instrução para obter informações adicionais.
originalParameters Este é um conjunto opcional de parâmetros, idêntico ao primeiro conjunto. Esses parâmetros são utilizados para a verificação de concorrência passiva.
Consulte Notas desta instrução para obter informações adicionais.

Notas

A palavra-chave WHERE na cadeia de consulta é opcional. Os parâmetros (variáveis de colunas) passados para SQLUpdate devem ter os mesmos nomes das colunas reais da tabela. Se o nome de um parâmetro não corresponder a nenhum nome de coluna, o parâmetro será ignorado.

Não tente atualizar uma coluna de uma tabela que foi criada com a opção NOT NULL, com um parâmetro do Tivoli Service Desk Developer's Toolkit que é $Unknown. Você pode passar um registro como parâmetro; neste caso, os nomes de campos devem corresponder aos nomes de colunas das tabelas ou serão ignorados.

Concorrência Passiva

O Tivoli Service Desk Developer's Toolkit fornece algum suporte interno para um mecanismo de concorrência, conhecido como concorrência passiva. A concorrência passiva é uma maneira simples, mas potente, de permitir que vários usuários acessem uma tabela sem bloqueá-la. É passiva no sentido de que nenhum bloqueio é aplicado ativamente no curso normal de acesso ao registro.

A concorrência passiva funciona da seguinte maneira:

Nota: Se apenas um registro for passado, SQLUpdate não executará nenhuma verificação de concorrência passiva.

Não é necessário utilizar registros como parâmetros. Se a concorrência passiva for utilizada, você deverá garantir que a ordem dos dois conjuntos de parâmetros será a mesma.

Não tente atualizar uma coluna de uma tabela que foi criada com a opção NOT NULL, com um parâmetro do Tivoli Service Desk Developer's Toolkit que é $Unknown.

Exemplo

Exemplo de KNOWLEDGEBASE;
(* Este exemplo mostra uma atualização sem concorrência passiva. *)
--PUBLIC
ROUTINES
FUNCTION Test:INTEGER;
PRIVATE
ROUTINES
FUNCTION Test:INTEGER IS
VARIABLES
(* colunas de tabelas *)
   age :INTEGER;
(* vários *)
  retCd: INTEGER;
 ACTIONS
age := 29;
(* Define todas as empregadas do sexo feminino até 29 anos, com 30 ou mais *)
retCd := SQLUpdate('emp','age > 29',age);
IF (retCd < 0) THEN
      EXIT retCd;
              END;
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


SQLUpdateCurrent

Descrição

Atualiza a linha do cursor posicionada atualmente com os valores contidos nos parâmetros (variáveis de colunas).

Sintaxe

SQLUpdateCurrent(cursor: SQLCURSOR, parameters): INTEGER;

Notas do Argumento

Nome do Argumento Descrição
cursor O cursor deve ser aberto anteriormente por uma chamada a SQLSelect.
parameters Esta é uma lista de um ou mais parâmetros (variáveis de colunas) delimitados por vírgulas, cujos nomes devem corresponder aos nomes de colunas correspondentes.
Consulte a seção Notas para obter mais informações.

Notas

SQLUpdateCurrent só é suportado no driver CLI do DB2. Cada coluna a ser atualizada deve ser especificada na cláusula FOR UPDATE OF, na cadeia de seleções (Consulte a instrução SQLSelect).

Os parâmetros (variáveis de colunas) passados para SQLUpdateCurrent devem ter os mesmos nomes das colunas reais da tabela. Se o nome de um parâmetro não corresponder a nenhum nome de coluna, o parâmetro será ignorado. Você pode passar um registro como um parâmetro. Neste caso, os nomes de campos devem corresponder aos nomes de colunas das tabelas ou serão ignorados.

Nota: A cláusula FOR UPDATE OF... deve ser utilizada em cada coluna a ser atualizada.

Não tente atualizar uma coluna de uma tabela que foi criada com a opção NOT NULL, com um parâmetro do Tivoli Service Desk Developer's Toolkit que é $Unknown.

Exemplo

Exemplo de KNOWLEDGEBASE;
--PUBLIC
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER;
PRIVATE
ROUTINES
FUNCTION Test(REF age: INTEGER):INTEGER IS
VARIABLES
(* colunas *)
   name :STRING;
(* vários *)
  cursor: SQLCursor;
  retCd: INTEGER;
 ACTIONS
SQLBeginWork; (* iniciar uma transação *)
(* selecionar todos os empregados de Indiana, cuja idade for
 maior *)
(* que a idade passada nesta função. *)
retCd := SQLSelect(cursor,'name from emp WHERE (state =
 ''IN'') AND ' & '(age > ' & age & ') FOR UPDATE OF NAME');
IF (retCd < 0) THEN
 SQLRollBack; (* deve terminar a transação *)
      EXIT retCd;
              END;
retCd := SQLFetch(cursor,name);
WHILE (retCd > 0) DO
 (* possivelmente, executar algumas operações com base em "name"
 .
 .
 .
 *)
 (* definir o nome como maiúsculas *)
 name := StrUpper(name);
 (* agora atualizar esta linha *)
 retCd := SQLUpdateCurrent(cursor,name);
IF (retCd < 0) THEN
    SQLCloseCursor(cursor);
 SQLRollback; (* inverter alterações e liberar bloqueios *)
      EXIT retCd;
              END;
 (* obter o registro seguinte *)
 retCd := SQLFetch(cursor);
              END;
    SQLCloseCursor(cursor);
SQLCommit; (* consolidar alterações e liberar bloqueios *)
              END;

Códigos de Retorno

Código de Retorno Descrição
1 Conclusão bem-sucedida
(outro) Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script

Consulte também


Tivoli Service Desk 6.0 Developer's Toolkit - Referência de Linguagem do Script

Retornar à Página Principal

Copyright