SQL | Início Anterior Próximo

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:

| 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|) }