Tivoli Service Desk 6.0 Developer's Toolkit - Referência de Linguagem do Script
Retornar à Página Principal
Inicia uma transação.
FUNCTION SQLBeginWork: INTEGER;
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 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ó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 |
Fecha cursores abertos e instruções preparadas e desconecta conexões DBMS abertas.
FUNCTION SQLCloseAll: INTEGER;
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 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 | Descrição |
1 | Conclusão bem-sucedida |
(outro) | Consulte o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script |
Fecha um cursor aberto anteriormente por uma chamada para SQLSelect.
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.
Nome do Argumento | Descrição |
cursor | Este é o parâmetro do tipo SQLCursor que foi definido por uma chamada anterior a SQLSelect. |
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 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ó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 |
Fecha uma instrução aberta anteriormente (preparada) por SQLPrepare.
FUNCTION SQLCloseStatement(statement: SQLSTATEMENT): INTEGER;
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.
Nome do Argumento | Descrição |
statement | O parâmetro statement é inicializado por uma chamada para SQLPrepare |
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 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ó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 |
Emite comandos não-SQL dependentes da implementação para o interpretador de SQL.
FUNCTION SQLCommand(sub_command: STRING): INTEGER;
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. |
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). |
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 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ó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 o Tivoli Service Desk 6.0 Developer's Toolkit - Guia de Programação do Script para obter informações sobre o seguinte:
Emite um comando SQL Commit Work para o interpretador de SQL, aceitando, assim, todas as alterações feitas durante esta transação.
FUNCTION SQLCommit: INTEGER;
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.
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 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ó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 |
Dado um registro cujos campos contenham critérios de pesquisa, SQLCreateSearchString criará uma cláusula SQL WHERE válida (sem o WHERE).
FUNCTION SQLCreateSearchString(VAL tableName: STRING, REF searchString: STRING, VAL searchRec: qualquer registro ou lista de qualquer registro): INTEGER;
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.
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 |
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:
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. |
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.
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 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ó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 |
Exclui uma linha especificada de uma tabela.
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.
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), ... |
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 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ó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 |
Exclui a linha na posição atual do cursor.
SQLDeleteCurrent(cursor: SQLCURSOR): INTEGER;
Nome do Argumento | Descrição |
cursor | O cursor deve ser aberto anteriormente por uma chamada a SQLSelect |
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 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ó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 |
Executa uma instrução preparada.
SQLExecute(statement: STATEMENT [,expressionList...]): INTEGER;
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.
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), ... |
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 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ó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 |
Executa uma instrução SQL diretamente de sua forma de cadeia.
SQLExecuteImmediate(sqlCommand: STRING [,expressionList...]): INTEGER;
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), ... |
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 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ó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 a documentação SQL para obter informações adicionais.
Busca a próxima linha do cursor nos parâmetros especificados.
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á.
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). |
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.
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.
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 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ó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 |
Converte um valor de dados em uma cadeia no formato de dados apropriado para o DBMS no qual você está conectado atualmente.
SQLFormat(value: SIMPLE EXPRESSION): STRING;
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.
Nome do Argumento | Descrição |
value | Deve ser um tipo simples (como DATE ou STRING) |
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:
A cadeia formatada é retornada. Se o valor passado for $Unknown, a cadeia 'NULL' será retornada.
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;
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.
Obtém o nome do cursor real utilizado internamente pelo Interpretador de SQL para o cursor especificado.
SQLGetCursorName(cursor: SQLCURSOR, cursorName: STRING):
INTEGER;
Nome do Argumento | Descrição |
cursor | O cursor deve ser aberto anteriormente por uma chamada a SQLSelect |
cursorName | O nome do cursor |
SQLGetCursorName só é suportado no driver CLI do DB2.
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ó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 |
Obtém o valor de uma configuração ou opção de estado de contexto.
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.
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. |
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ó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 |
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;
Insere uma nova linha na tabela especificada.
SQLInsert(tableName: STRING [,parameters...]): INTEGER;
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). |
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 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ó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 |
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.
SQLPrepare(statement: SQLSTATEMENT, sqlCommand: STRING): INTEGER;
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).
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 |
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 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ó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 |
Para obter informações adicionais, consulte a documentação de SQL.
Emite um comando ROLLBACK WORK para o interpretador de SQL, invertendo/desfazendo assim, todas as alterações feitas durante esta transação.
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.
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 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ó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 |
Abre um cursor com base nas linhas especificadas para busca posterior por SQLFetch.
SQLSelect(cursor: SQLCURSOR, queryString: STRING [,expressionList...]): INTEGER;
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.
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), ... |
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 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ó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 |
Seleciona e busca a linha especificada nos parâmetros (variáveis de colunas).
SQLSelectInto(queryString: STRING [,parameters...]): INTEGER;
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. |
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.
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 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ó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 |
Define o valor de uma configuração ou opção de estado de contexto.
SQLSetOption(VAL option: STRING, VAL optionValue:<ANY SIMPLE VARIABLE> [,VAL srcOrConn : <INTEGER OR STRING EXPRESSION> ): INTEGER;
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.
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. |
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 de KNOWLEDGEBASE;
--PUBLIC ROUTINES
PROCEDURE Example;
PRIVATE ROUTINES PROCEDURE Example IS VARIABLES retCd: INTEGER; ACTIONS retCd := SQLSetOption('CASE CONVERSION', 2); END;
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 |
Atualiza a linha especificada com os valores contidos nos parâmetros (variáveis de colunas).
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.
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. |
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.
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 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ó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 |
Atualiza a linha do cursor posicionada atualmente com os valores contidos nos parâmetros (variáveis de colunas).
SQLUpdateCurrent(cursor: SQLCURSOR, parameters): INTEGER;
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. |
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 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ó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 |
Tivoli Service Desk 6.0 Developer's Toolkit - Referência de Linguagem do Script