SQL
Início  Anterior  Próximo

minilogowi


seta SQL



SQL (Structued Query Language) é uma linguagem projetada para ser usada com banco de dados relacionais e seus comandos são dividos em duas categorias, os comandos DML
(Data Manipulation Language) que lidam com dados, ou recuperando ou modificando-os para mantê-los atualizados; e os comandos DDL (Data Description Language) que lidam com criação ou alteração das tabelas, views (visões) e índices.

Dessas duas categorias a mais usada no WebIntegrator, certamente, será a DML. Logo abaixo segue uma lista dos comandos DML mais comuns.

·SELECT: usado para consultar e exibir dados de um banco de dados. O comando SELECT especifica quais colunas serão incluídas no resultado. A grande maioria das instruções SQL usadas nas aplicações são comandos SELECT;  
 
·INSERT: adiciona novas linhas a uma tabela. INSERT é usado para popular uma tabela recém-criada ou para adicionar uma ou mais linhas a uma tabela já existente;  
 
·DELETE: remove uma linha especificada ou um conjunto de linhas de uma tabela;  
 
·UPDATE: altera um valor existente em uma coluna de uma tabela.  

Logo abaixo temos alguns exemplos de como o campo
SQL
pode ser preenchido:

SELECT * FROM Funcionarios

INSERT INTO Funcionarios VALUES (|codigo|,"|nome|")

DELETE FROM Funcionarios WHERE cod = |codigo|

UPDATE Funcionarios SET
  nome = "|nome|", endereco = "|endereco|" WHERE cod = |cod|


Quando um comando sql é executado o valor das colunas é recuperado pelo getString mas se for um texto longo
o desenvolvedor pode especificar para recuperar usando o getAsciiStream através da função wi.longTextColumns. Ex:

|$wi.longTextColumns(3,5)$|

SELECT cod, nome, anamnese, nascimento, historico FROM Paciente

Por padrão o WI irá criar um Statement com a instrução substituída pelo resultado do processamento dos pipes (caso haja filtros de sql esses caracteres serão removidos das variáveis). Para fazer com que o WI processe a instrução usando um PreparedStatement é necessário que o pipe seja prececido, encostado, a um sinal "?". Ex:

INSERT INTO Pessoa (cod, nome) VALUES (?|tmp.cod|, ?|tmp.nome|)

Quando não é explicitamente informada o tipo de atribuição (cast) o WI irá utilizar o setString, mas é possivel fazer um
comando definindo qual comando set deverá ser utilizado:

select * from pessoa where nome like ?[str]|tmp.ini|
insert into pessoa (cod, nome) values (?[int]|tmp.cod|, ?[str]|tmp.nome|)

O tipos disponiveis para o colchete são:
asc
(setAscii), bin (setBinary), dat (setDate), int (setInt), lon (setLong), flt (setFloat), dbl (setDouble), str (setString)

Quando é utilizado [bin] e o valor começa com "file:" será procurado o arquivo correspondente no disco.
Ex: O valor "file:/tmp/arquivo.jpg"

Quando o cast é especificado o WI faz o set correspondente e caso haja erro de cast ele define null
(resolve problemas de drivers que obrigam o set correspondente como no informix). Ex:

insert into teste (data) values (?[dat]|tmp.data|) 
Se data for vazio fica null no bd.

insert into teste (data) values (?|tmp.data|) 
Se data for vazio fica 0000-00-00 no bd.

Quando é especificado [str] é setString, mas se o texto for null (insensitivo) fica null para não violar uma chave
estrangeira, já o convencional, quando não especifica, ficaria o texto null.
Ex: Uma combo de estado onde a seleção não é obrigatorio (o item selecione teria value="null")

Existe uma função que retorna a lista de tabelas ou views de uma conexão:
|$wi.listmeta(table)$

Existe uma função que retorna a meta-estrutura de uma tabela, e é ela:
|$wi.listmetastruct(tabela)$

Para executar uma chamada a uma
stored procedure utilize a sintaxe específica do sistema gerenciador de banco de dados (SGBD) que estiver sendo utilizado. No caso do SGBD Oracle a sintaxe a ser usada deve ser a seguinte:

{ call <nome-da-stored-procedure>([<param1>, ...]) }
{ call ? := <nome-da-stored-procedure>([<param1>, ...]) }




importante IMPORTANTE:

Ao chamar stored procedures Oracle assegure-se que:  
 
1. se ela retornar um conjunto de resultados, os mesmos sejam referenciados através de um cursor. O código da stored procedure deve ser semelhante a:  
 
CREATE OR REPLACE FUNCTION <nome-da-stored-procedure>([<param1>, ...])  
RETURN types.ref_cursor  
AS  
<nome-do-cursor> types.ref_cursor;  
BEGIN  
OPEN <nome-do-cursor> FOR   
...  
RETURN <nome-do-cursor>;  
END;  
 
 
2. se ela realizar atualizações e/ou inserções de dados que seja retornado um valor numérico. Valores negativos servem para indicar que houve algum erro durante a execução da stored-procedure ou valores positivos para indicar a quantidade de linhas que foram alteradas e/ou inseridas.  
 
3. para passar parâmetros por referência é necessário colocar ".out" no nome da variável que usa Prepared Statement para indicar que o seu retorno dese ser capturado.  
Ex (oracle): { call myprocedure(?|tmp.cod|, ?|tmp.nome.out|) }