Arquivo de maio, 2014

A tag <script> suporta um atributo src que especifica a URL de um arquivo contendo um código JavaScript. Usar este método é muito vantajoso porque você pode reutilizar o mesmo código dentro de um arquivo Javascript em quantas paginas forem necessário, além de deixar seu código HTML menor e mais fácil de ler.

Sintaxe:

<script src=”../../scripts/meuarquivo.js”> </script>

src - Javascript

src – Javascript

Exemplo:

Neste exemplo utilizamos um arquivo Javascript com a extensão .js para executar um código dentro de nossa pagina HTML.

Html / JavaScript

<!DOCTYPE html>
<html>

<head>
   <title>Desenvolvimento Aberto</title>
</head>

<body>

<h2>Desenvolvimento Aberto</h2>
<h3>Javascript - WebBrowser - Script Externo</h3>
<h4>JavaScript</h4>
<br>	

<pre>
<script src="externo.js"> </script>
</pre>

</body>

</html>

JavaScript – .js

// Desenvolvimento Aberto
// Testa Javascript exeterno
// externo.js

document.writeln("Este texto veio de um arquivo externo");
document.writeln("O arquivo se chama externo.js");
document.writeln("Ele pode ser lido atravez do comando SRC");
document.writeln("Para ler um arquivo externo usa-se a seguinte sintaxe:\n");
document.writeln("Utilize: src=&#34meuscript.js&#34 ");

O SAP R/3 possui um conceito de clientes definidos por diferentes cenários dentro de um sistema SAP, cada cliente possui um proposito exclusivo e por padrão alguns destes clientes são configurados durante a instalação do R/3, é possível que um implementador configure seus próprios clientes a partir da configuração padrão.

Basicamente todos os objetos e dados que pertencem a um cliente estão contidos dentro do banco de dados do SAP, entre as milhares de tabelas do sistema, estão todas as configurações necessárias para que o sistema funcione corretamente e é onde também estão as configurações customizadas de cada implementação, incluindo tabelas, dados, programas, funções, classes entre outros.

NetWeaver 7

O NetWeaver 7 roda sobre o banco de dados da SAP chamado NSP, e por padrão possui os esquemas DOMAIN, SAPNSP, SUPERDBA, SYSINFO, possui índices, Stored Procedures, Sinônimos, mas não possui Triggers, é comum sistemas de grande porte não utilizarem Triggers estas são consideradas armadilhas por muitos DBAs, por gerar erros desnecessários e minimizar a velocidade do sistema já que normalmente tratam registro a registro até os procedimentos de dados em massa, mesmo as IDEs de programação SQL de hoje mudaram a localização do node de Triggers em sua interface, pois antes costumavam ficar junto com as tabelas e eram facilmente esquecidas na hora da programação as tornando muitas vezes invalidas.

Cliente 000

O cliente 000 é o cliente SAP standard, que quando uma nova versão é instalada, SAP atualiza automaticamente: os conteúdos e estruturas de tabelas, os programas, as telas, os formulários, a ajuda on-line e outros objetos e dados do sistema SAP. Este cliente sempre tem o status atual padrão e você pode transferir as configurações padrão do cliente 000 para um outro cliente. O cliente 000 não é um cliente de trabalho e sim de configuração inicial do sistema.

Por padrão os dados de exemplo do NetWeaver 7 e este conjunto de tabelas e dados é chamado Flight Model estão armazenados dentro do cliente 000 e precisa ser transportado para um cliente por exemplo de DEV ou SANDBOX para poder ser utilizados corretamente. Neste post não vamos importar os dados definitivamente, o objetivo é entender como funciona o armazenamento de dados dentro de um cliente.

Para informação adicional sobre os clientes do sistema SAP clique aqui.

Mandante

O mandante é o nível máximo da hierarquia no sistema SAP, as especificações feitas, ou os dados entrados neste nível são válidos para todas as empresas e para todas as outras estruturas organizacionais. Portanto, é necessário fazer essas especificações, ou entrar com esses dados somente uma vez. Isto assegura a consistência dos dados.

Os usuários devem entrar com uma chave de mandante quando fazem o logon no sistema SAP. Isto define o mandante em que eles pretendem trabalhar. Todas as entradas feitas são salvas por mandante. Processamento e analise de dados são também executados por mandante. Um mandante contem a unidade comercial, organizacional e tecnicamente auto-contida em um sistema SAP. Os mandantes têm os seus próprios registros mestre e conjuntos de tabelas. A definição de unidade organizacional mandante é obrigatória.

Na pratica o mandante é um campo chave existente em quase todas as tabelas do banco de dados do sistema SAP. Existem transações que contem programas que manipulam configurações entre clientes, este programas visam manter consistência de configuração e dados de todo o sistema SAP, quando se manipula requisitos de transportes de um cliente para o outro.

Workaround Para Transportar Dados

Você NUNCA deve executar este tipo de procedimento em um sistema SAP a não ser que esteja utilizando uma cópia de estudos. É possível fazer o transporte diretamente no banco de dados usando simples instruções SQL, mas para isso você deve conhecer a modelagem de dados principalmente no que se refere as chaves estrangeiras.

A seguir vamos mostrar como funciona realmente o conceito de mandantes e como os dados são passados de um cliente para o outro.

1-  Primeiro você precisa de um acesso de DBA e uma ferramenta de SQL do banco de dados utilizado pelo seu sistema SAP, em nosso caso estamos usando o SAP MaxDB e o SQL Studio. Vamos efetuar um comando básico na tabela de exemplo do Flight Model do NetWeaver 7, chamada SCARR e poderemos ver que os dados estão contidos apenas no mandante padrão que é o cliente 000.

Dados - Mandante 000

Dados – Mandante 000

2 – No dicionário de dados na transação SE11, podemos ver a estrutura da tabela SCARR, a mesma que esta aberta no Studio SQL, porem no sistema R/3 estamos logados no mandante 001 e como podemos ver na tabela acima não existe dados para o campo MANDT para o cliente 001.

SCARR - Estrutura

SCARR – Estrutura

3 – Quando tentamos verificar o conteúdo da tabela SCARR sobre o mandante 001 o sistema acusa corretamente que não existe dados.

SCARR - Dados - 001

SCARR – Dados – 001

4 – Para transportar os dados para o mandante 001 basta utilizar uma instrução SQL básica contendo um comando INSERTSELECT com um alias no campo mandante, visto que é preciso respeitar a ordem da proteção referencial do banco de dados sobre as chaves estrangeiras contidas na tabela, esta tabela por ser uma tabela pai não possui uma chave estrangeira atrelada a ela.

Transporte - Insert...Select

Transporte – Insert…Select

5 – Após as rows serem duplicadas com sucesso você pode verificar usando uma instrução Select.

Dados Transportados

Dados Transportados

6 – Agora você pode verificar o conteúdo da tabela SCARR dentro do mandante 001 no qual estávamos logados e os dados serão encontrados.

Mandante 001 - Dados

Mandante 001 – Dados

OBS: Existem ferramentas especificas para transporte entre os clientes, este método pode ser utilizado somente a nível de estudo, em um ambiente empresarial você esta sujeito aos termos de garantia do sistema SAP.

 

 

SAP – Macros – Abap

Publicado: 22 de maio de 2014 em Abap

Se você quiser reutilizar o mesmo conjunto de instruções mais de uma vez em um programa, você pode incluí-los em uma macro. Por exemplo, isso pode ser útil para cálculos longos ou declarações WRITE complexas. Você só pode usar uma macro dentro do programa em que está definida, e a Macro só pode ser chamada após a sua definição. Uma macro substitui os valores definidos para seus parâmetros por valores utilizados pelo código do usuário e os executam, existe um limite de definição de nove parâmetros para uma macro, exemplo:  &1, &2 … &9.

Macros - Abap

Macros – Abap

Exemplo:

Neste exemplo definimos três parâmetros para serem executados por uma macro.

Abap

*&---------------------------------------------------------------------*
*& Report  ZMACROS
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& Macros
*&---------------------------------------------------------------------*

REPORT  ZMACROS.

* Declara variável
DATA: resultado TYPE i.

* Define Macro
DEFINE calculo.

  resultado = &1 &2 &3.
  Write : / 'Calculo: &1 &2 &3 = ', resultado.

END-OF-DEFINITION.

* Executa Macro
Write : / 'Efetua calculos a partir de Macros', / .

calculo 10 + 10.
calculo 15 - 10.
calculo 10 * 10.
calculo 10 /  2.

Database – SAP MaxDB – SQL Studio

Publicado: 22 de maio de 2014 em Abap, Sql

MaxDB é  um banco de dados baseado em SQL-92  compatível com o sistema de gestão de dados relacional ANSI (RDBMS) da SAP AG, que foi entregue também pela MySQL AB de 2003 a 2007. MaxDB é voltado para grandes ambientes SAP, mySAP Business Suite e outras aplicações que requerem a funcionalidade de banco de dados de nível empresarial. Ele é capaz de executar terabytes de dados em operação contínua.

O MaxDB foi um projeto de código aberto sob a licença GNU, porem hoje é mantido e desenvolvido pela SAP AG para suportar todos os seus aplicativos, apesar do MaxDB ser um banco de dados poderoso e possuir uma gama de recursos requeridos pelos ambientes de nível corporativo ele é utilizado somente em soluções da SAP de pequeno e médio porte. O MaxDB possui todos os padrões necessários para um banco de dados e também pode ser utilizado por aplicações não SAP.

SAP MaxDB: http://maxdb.sap.com/

O MiniSAP possui uma versão no qual roda em cima do SAP MAXDB, é possível instalar as ferramentas adicionais chamadas MAXDB TOOLS e o SQL STUDIO. Você pode utilizar o MAXDB para criar bancos de dados, procedures, sequences e etc. Você também pode estudar a arquitetura do banco de dados do SAP por traz do tradicional dicionário de dados do R/3 para aprender como funciona o sistema SAP nos seus bastidores. É recomendado não efetuar nenhuma alteração nas tabelas de sistema do SAP.

Instalando o SAP MaxDB – SQL Studio

1 – Na imagem do disco do NetWeaver 7, na pasta MAXDBTOOLS instale o programa SQLSTD76.exe.

Instalar

Instalar

2 – Escolha o diretório de instalação caso necessário.

Diretório

Diretório

3 – Escolha o nome da pasta da instalação ou  deixe na opção padrão.

Pasta da Instalação

Pasta da Instalação

4 – Confira os caminhos e clique em próximo.

Resumo

Resumo

5 – Aguarde o andamento da instalação.

Andamento

Andamento

6 – Clique em Finish para completar a instalação.

Finalizar

Finalizar

7 – Clique no ícone da área de trabalho chamado SQL Studio para abrir a ferramenta.

SQL Studio

SQL Studio

8 – Clique no ícone em forma de chave para abrir uma conexão com o banco de dados NSP do NetWeaver Server Abap, use as credenciais da imagem abaixo, a senha é a mesma escolhida na instalação do Mini SAP:

Credenciais de Login

Credenciais de Login

9 – Use a instrução SQL da imagem para retornar uma tabela do sistema SAP.

Instrução SQL - SAP NSP

Instrução SQL – SAP NSP

* O SQL Studio permite que você navegue e manipule o MaxDB e as tabelas do banco de dados do sistema SAP. Nunca modifique tabelas do sistema SAP! O sistema pode se tornar instável ou inutilizável.

 

O objeto Window é o principal ponto de entrada das APIs para todos os recursos de JavaScript do lado do cliente. Ele representa uma janela do navegador web ou um frame.

Você encontra a descrição completa do objeto Window neste link:

https://developer.mozilla.org/en-US/docs/Web/API/Window

Window

Window

Exemplo:

Neste exemplo usamos o objeto Windows para demonstrar os alguns recursos básicos de como controlar o WebBrowser do lado do cliente.

Html / JavaScript

<!DOCTYPE html>
<html>

<head>
   <title>Desenvolvimento Aberto</title>
</head>

<body>

<h2>Desenvolvimento Aberto</h2>
<h3>Javascript - WebBrowser - Client - Side</h3>
<h4>JavaScript</h4>
<br>
<p>Objeto Window:</p>
<p>String Codificada: RGVzZW52b2x2aW1lbnRvIEFiZXJ0byAtIERlY29kaWZpY2Fkbw==</p>
<button onclick="Janela()">Janela</button>
<button onclick="Alerta()">Alerta</button>
<button onclick="Decodifica()">Decodifica String</button>

<pre>
<script>

function Janela()
{
    var novajanela = window.open("Nova Janela", "Nova Janela", "width=300, height=150");
    novajanela.document.writeln("<p>Desenvolvimento Aberto</p>");
    novajanela.document.writeln("<p>Nome da Janela: " + novajanela.name + "</p>");
}

function Alerta()
{
    alert("Desenvolvimento Aberto\nCaixa de Alerta!!!");
}

function Decodifica()
{

    var str = "RGVzZW52b2x2aW1lbnRvIEFiZXJ0byAtIERlY29kaWZpY2Fkbw==";
    var dec = window.atob(str);
    alert("String decodificada: " + dec)

}

</script>
</pre>

</body>

</html>

A instrução UPDATE altera os valores existentes em uma tabela, uma tabela de base de uma exibição ou tabela mestre de uma visão materializada.

Segredos do UPDATE

A clausula Update possui uma importante sintaxe na qual permite que você atualize uma tabela a partir de dados de outra tabela sem utilizar um procedimento e sim o próprio set de dados, este método é considerado um segredo,  porque normalmente este tipo de sintaxe é substituída por um Cursor (principalmente em Oracle onde existe uma legião de desenvolvedores aficionados por cursores), porem como veremos a seguir o método utilizando a instrução Update executa apenas um acesso ao banco de dados, para alterar, por exemplo, três linhas enquanto se utilizássemos um Cursor, na mesma situação, precisaríamos de no mínimo quatro acessos ao banco de dados, um para selecionar os valores da primeira tabela e três para alterar os valores na segunda tabela, estes se dariam intercaladamente assim como se utilizássemos uma instrução comum de looping de qualquer linguagem de programação.

Oracle, IBM DB2 e Microsoft SQL Server

Para eliminar cursores e alterar grandes quantidades de dados, o exemplo abaixo garante um alto desempenho se utilizado em bases de dados de grande porte, em tabelas com varias rows, imagine alterar cem mil linhas de uma única vez em um único acesso ao banco de dados ao invés de criar um cursor, onde além da seleção dos dados é necessário um laço para navegar por cada uma das cem mil linhas para executar uma instruções update (cem mil).

Para isto a Oracle e a IBM possui conceitos iguais, utilizando um alias na tabela a ser alterada, já a Microsoft resolveu facilitar a logica para os desenvolvedores adicionando na sintaxe do comando Update a clausula From, igualando a logica do clássico comando Select.

UPDATE SET-BASED

Set-Based é um conceito para executar manipulação de dados SQL utilizando um set de dados ao invés de utilizar um procedimento como um cursor ou uma função, deste modo o motor de banco de dados determina os melhores possíveis algoritmos ou lógica de processamento para fazer esta operação.

Primeiro precisamos preparar um exemplo para que seja fácil entender o método de alterar uma tabela à partir de outra tabela, então vamos utilizar os comandos SELECTINSERT para atualizar os dados das duas tabelas, e um ALTER TABLE para adicionar campos novos nas tabelas, este exemplo necessita da criação das tabelas e inserção de dados dos exemplos anteriores que podem ser encontrados na categoria SQL ou crie um exemplo como na figura a seguir.

Rode todos os comandos do script abaixo exceto o ultimo UPDATE, após a execução dos scripts você obterá duas tabelas contendo dados como na figura abaixo:

UPDATE - 2 Tabelas

UPDATE – 2 Tabelas

Agora precisamos atualizar os dados do campo Tipo da Tabela 1 para o campo Tipo da Tabela 2 que contem valores nulos. O método que normalmente vem a cabeça é utilizar um cursor selecionando os dados da Tabela 1, e enquanto executamos um looping dos dados podemos utilizar um comando Update comum para substituir o valor nulo da Tabela 2 com o valor do campo Tipo da Tabela 1.

Porem é possível obter o mesmo resultado utilizando apenas uma instrução SQL contendo uma subquery no caso do ORACLE e DB2 e utilizando a instrução FROM no caso do MSSQL, como mostra o ultimo exemplo da instrução Update do script abaixo:

Resultado - Oracle

Resultado – Oracle

Exemplo:

Neste exemplo utilizamos a instrução Update baseada em um set de dados,  um método não procedureal para atualizar uma tabela à partir de outra tabela substituindo um cursor.

Oracle / IBM DB2


-- Insere valores da tabela1 para tabela2
insert into tabela2
select * from tabela1;

-- Altera tabelas fisicamente, adicionando um campo
alter table tabela1 add Tipo CHAR(1);
alter table tabela2 add Tipo CHAR(1);

-- Altera campo tipo usando uma condição de igual
update tabela1 set tipo = 'A'
where IdTabela = 2;

-- Altera campo tipo usando uma condição de diferente
update tabela1 set tipo = 'B'
where IdTabela <> 2;

-- Atualiza 2 tabelas sem cursor
update tabela2 A
    set A.Tipo = (Select B.Tipo
                  from Tabela1 B
                  Where B.IdTabela = A.IdTabela)

-- Visualiza tabela 2
Select * from tabela2;

Microsoft SQL Server

-- Insere valores da tabela1 para tabela2
insert into tabela2
select * from tabela1

-- Altera tabelas fisicamente, adicionando um campo
alter table tabela1 add Tipo CHAR(1)
alter table tabela2 add Tipo CHAR(1)

-- Altera campo tipo usando uma condição de igual
update tabela1 set tipo = 'A'
where IdTabela = 2

-- Altera campo tipo usando uma condição de diferente
update tabela1 set tipo = 'B'
where IdTabela <> 2;

-- Atualiza 2 tabelas sem cursor
update tabela2
    set Tipo = B.Tipo
from Tabela1 A, Tabela2 B
Where A.IdTabela = B.IdTabela

-- Visualiza tabela 2
Select * from tabela2

A instrução DELETE apaga uma ou mais linhas de uma tabela, uma tabela não particionada ou dividida, uma tabela base não particionada ou particionada de uma visão, uma tabela recipiente não particionada. A clausula DELETE geralmente é usada em conjunto com uma instrução de filtro WHERE. A cláusula WHERE serve para filtrar limitando os registros afetados por um comando DML (consultas, atualizações ou exclusões). Você pode ver um exemplo dos scripts nas imagens abaixo:

Oracle:

Oracle

Oracle

IBM DB2:

DB2

DB2

Microsoft SQL Server:

MSSQL

MSSQL

Exemplo:

Neste exemplo inserimos um dado na tabela e utilizamos o comando DELETE adicionado de uma clausula de filtro WHERE para apagar uma única linha de dados da tabela.

Oracle

-- Insere um registro na tabela
insert into Tabela1 values (4, 'Este registro será deletado');

-- Deleta o registro inserido
delete from Tabela1 where IdTabela =4;

-- Visualiza a tabela
select  * from Tabela1;

IBM DB2

-- Insere um registro na tabela
insert into DA.Tabela1 values (4, 'Este registro será deletado');

-- Deleta o registro inserido
delete from DA.Tabela1 where IdTabela =4;

-- Visualiza a tabela
select  * from DA.Tabela1;

Microsoft SQL Server

-- Insere um registro na tabela
insert into Tabela1 values (4, 'Este registro será deletado');

-- Deleta o registro inserido
delete from Tabela1 where IdTabela =4;

-- Visualiza a tabela
select  * from Tabela1;

Use a instrução INSERT para adicionar linhas a uma tabela comum, a uma tabela base de uma visão, uma partição de uma tabela particionada, uma subpartição de uma tabela composta particionada, uma tabela de objeto ou tabela base de uma visão do objeto.

Basicamente existem três tipos de sintaxe comuns da instrução INSERT, a primeira utiliza-se apenas o nome da tabela e os valores a serem inseridos, neste caso a quantidade de valores inseridos devem ser iguais e contemplar a mesma ordem dos campos da tabela a ser preenchida. A segunda sintaxe você deve especificar os nomes dos campos desejados da tabela e os valores a serem inseridos, o terceiro método de inserção de dados, você escreve uma pesquisa usando a instrução Select logo abaixo da linha de comando contento a clausula de inserção, você pode ver os três resultados nas imagens abaixo:

Oracle:

Oracle

Oracle

IBM DB2:

DB2

DB2

Microsoft SQL Server:

MSSQL

MSSQL

Exemplo:

Neste exemplo utilizamos as três sintaxes básicas para se utilizar o método de inserção de dados em uma tabela.

Oracle

-- Selecione as instruções uma a uma e execute

-- Inserindo em todos os campos da tabela
insert into tabela1 values (1, 'Teste 01')

-- Inserindo valores em colunas especificas
insert into tabela1  (IDTABELA, DESCTABELA)
      values (2, 'Teste 02')

-- inserindo valores a partir de uma pesquisa      
insert into tabela1
select 
       3 as IDTABELA, 
       'Teste 03' as DESCTABELA
from dual       

-- visualiza os dados
select * from tabela1

IBM DB2

-- Selecione as instruções uma a uma e execute

-- Inserindo em todos os campos da tabela
insert into DA.tabela1 values (1, 'Teste 01');

-- Inserindo valores em colunas especificas
insert into DA.tabela1  (IDTABELA, DESCTABELA)
      values (2, 'Teste 02');

-- inserindo valores a partir de uma pesquisa      
insert into DA.tabela1
select 
       3 as IDTABELA, 
       'Teste 03' as DESCTABELA
from sysibm.sysdummy1;

-- Visualiza os dados
select * from DA.tabela1;

Microsoft SQL Server

-- Selecione as instruções uma a uma e execute

-- Inserindo em todos os campos da tabela
insert into tabela1 values (1, 'Teste 01')

-- Inserindo valores em colunas especificas
insert into tabela1  (IDTABELA, DESCTABELA)
      values (2, 'Teste 02')

-- inserindo valores a partir de uma pesquisa      
insert into tabela1
select 
       3 as IDTABELA, 
       'Teste 03' as DESCTABELA      

-- Visualiza os dados
select * from tabela1

 

Data Definition Language

A Linguagem de Definição de Dados (DDL) é usada para criar e destruir os bancos de dados e objetos de banco de dados. Os objetos de banco de dados incluem  views, schemas, tables, indexes, etc. As instruções DDL mais comuns são CREATE, DROP ALTER.

A sintaxe genérica para as instruções DDL são:

CREATE

Este comando cria uma nova tabela e tem uma sintaxe pré-definida. A sintaxe da instrução CREATE é CREATE TABLE [nome da tabela] ([definições de coluna]) [parâmetros da tabela].

CREATE TABLE Tabela (Empregado INTEGER PRIMARY KEY,
Nome CHAR (50) NULL,
Sobrenome CHAR (75) NOT NULL).

ALTER

Um comando de alteração modifica uma tabela do banco de dados existente. Este comando pode somar uma coluna adicional, eliminar colunas existentes e até mesmo alterar os tipos de colunas envolvidas em uma tabela do banco de dados. Uma sintaxe do comando de alteração ALTER é composto do tipo de objeto e os parâmetros do objeto.

ALTER TABLE Tabela ADD campo CHAR(10).

DROP

Um comando DROP exclui uma tabela, índice ou view. Sintaxe da instrução é DROP tipo de objeto nome do objeto.

DROP TABLE Tabela.

Criando Tabelas utilizando DDL

A sintaxe SQL para criar as tabelas nos diferentes bancos de dados é a mesma, porem cada um dos banco de dados possui seus próprios tipos de dados para os diferentes valores no qual será armazenado nas tabelas. Para saber mais sobre os tipos de dados de cada um dos bancos de dados utilize os links abaixo:

Data Types

Oracle: http://docs.oracle.com/cd/B28359_01/server.111/b28318/datatype.htm

IBM DB2: http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2z10.doc.intro%2Fsrc%2Ftpc%2Fdb2z_datatypes.htm

Microsoft SQL Server: http://msdn.microsoft.com/en-us/library/ms187752.aspx

Oracle:

Oracle - DDL

Oracle – DDL

IBM DB2:

IBM DB2 - DDL

IBM DB2 – DDL

Microsoft SQL Server:

MSSQL - DDL

MSSQL – DDL

Exemplo:

Neste exemplo criamos duas tabelas utilizando a linguagem DDL para escrever um script SQL.

Oracle

CREATE TABLE tabela1 (

    IdTabela    NUMBER(5),
    DescTabela  VARCHAR2(50)

);
/

CREATE TABLE tabela2 (

    IdTabela    NUMBER(5),
    DescTabela  VARCHAR2(50)

);

IBM DB2

CREATE TABLE DA.tabela1 (

    IdTabela    INTEGER,
    DescTabela  VARCHAR(50)

);

CREATE TABLE DA.tabela2 (

    IdTabela    INTEGER,
    DescTabela  VARCHAR(50)

);

Microsoft SQL Server

CREATE TABLE tabela1 (

    IdTabela    int,
    DescTabela  NVarchar(50)

);

CREATE TABLE tabela2 (

    IdTabela    int,
    DescTabela  NVarchar(50)

);

A instrução Select é sem duvida é a instrução mais importante de um programa que manipula dados, não importa o quão  robusto é o seu servidor, não importa qual é o seu banco de dados e nem o quão afinado está a sua configuração, instruções “Select” mal feitas podem ser responsáveis pela lentidão de um sistema.

É possível usar a instrução Select de varias maneiras diferentes, este comando é muito flexível e pode ser associado a outras instruções SQL a fim de se obter um resultado especifico, por exemplo é possível rodar uma instrução que seleciona dados em cima do resultado de outra instrução que seleciona dados,  é possível unir, filtrar, calcular, relacionar e etc.

É de extrema importância que instruções Select sejam escritas da forma mais correta e enxuta possível, pois com uma abrangência enorme de recursos é fácil extrapolar o sentido da palavra “criatividade” na hora de escrever está instrução, causando lentidão no sistema e como diz o ditado “de grão em grão a galinha enche o papo”, para desespero de alguns de Select em Select o sistema pode ficar cada vez mais lento.

O que você precisa saber na hora de criar uma instrução Select?

É essencial que o desenvolvedor tenha conhecimento do que é e como funcionam as Tablespaces (Oracle e IBM DB2 ou Filegroups MSSQL). Uma Tablespace é onde os servidores de banco de dados armazenam os dados logicamente.

O que todos devemos saber é que um banco de dados possui Tablespaces do sistema, estas são criadas durante a instalação do banco de dados, e exigem uma configuração especifica para que haja uma boa performance do seu banco de dados, mas em nosso caso especifico existe uma Tablespace que nos afeta diretamente e o seu nome pode variar mas é conhecida como Tablespace Temporária.

Tablespace Temporária

Tablespaces temporárias são usadas ​​para operações especiais, particularmente para classificar os resultados dos dados no disco e geralmente para manipular operações SQL que são muito grandes para ser executada somente pela memoria RAM. Utilizada para armazenar objetos transitórios durante as classificações e agrupamentos de dados durante a execução de uma SQL contendo as cláusulas ORDER BY e GROUP BY, entre outras.  Apesar das Tablespaces temporárias não serem tão criticas e poderem ser excluídas e recriadas quando necessário é preciso saber que elas existem, que precisam de configuração especial, que são manipuladas, na grande maioria das vezes de um modo invisível ao desenvolvedor.

Oracle: http://docs.oracle.com/cd/B10500_01/server.920/a96524/c04space.htm

IBM DB2: https://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.db2.luw.admin.dbobj.doc%2Fdoc%2Fc0004935.html

Mssql Server: http://msdn.microsoft.com/en-us/library/ms190768.aspx

Nos links acima você encontra a documentação completa sobre as Tablespaces de cada banco de dados, o Microsoft SQL Server não possui Tablespaces e sim Filegroups apesar do conceito ser muito parecido existe importantes diferenças, o link acima mostra como funciona o Database TEMPDB do MSSQL.

Data Query Language

Embora tenha apenas um comando, a DQL é a parte do SQL mais utilizado. O comando SELECT permite ao usuário especificar uma consulta “query” como uma descrição do resultado desejado. Esse comando é composto de várias cláusulas e opções, possibilitando elaborar consultas das mais simples às mais elaboradas.

SELECT

A instrução mais básica do comando Select permite que você retorne dados criados por você mesmo em tempo de execução do script SQL, é possível criar campos com conteúdos e nomes, somar dados, retornar variáveis do sistema e etc. Este procedimento básico varia de banco para banco, por exemplo o Oracle possui uma tabela chamada DUAL para este tipo de procedimento, o IBM DB2 possui a tabela sysibm.sysdummy1 e também possui a tabela DUAL, já o Microsoft SQL Server possui uma sintaxe diferente para a instrução Select eliminando a obrigatoriedade da clausula From.

Oracle:

Oracle - Dual

Oracle – Dual

IBM DB2:

IBM DB2 SYSDummy1

IBM DB2 SYSDummy1

Microsoft SQL Server:

MSSQL Server

MSSQL Server

Retornando dados de uma tabela

Para retornar campos de uma tabela todos os 3 bancos possuem a mesma sintaxe básica:

Select * from tabela

Para a documentação completa desta instrução segue os links oficiais:

Oracle: http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_10002.htm

IBM DB2: http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=%2Fcom.ibm.db2z10.doc.sqlref%2Fsrc%2Ftpc%2Fdb2z_sql_selectclause.htm

MSSQL: http://msdn.microsoft.com/pt-br/library/ms189499(v=sql.120).aspx

Exemplo:
No exemplo a seguir escrevemos três instruções Select que retornam dados criados pelo usuário em tempo de execução.

Oracle

Select
  'Desenvolvimento Aberto' as titulo,
  'Criando um resultado em tempo de execução' as aula,
  '20' as valor1,
  '10' as valor2,
  20 + 10 as total
from DUAL

IBM DB2

Select
  'Desenvolvimento Aberto' as titulo,
  'Criando um resultado em tempo de execução' as aula,
  '20' as valor1,
  '10' as valor2,
  20 + 10 as total
 from sysibm.sysdummy1

Microsoft SQL Server

Select
  'Desenvolvimento Aberto' as titulo,
  'Criando um resultado em tempo de execução' as aula,
  '20' as valor1,
  '10' as valor2,
  20 + 10 as total