PL/SQL9i BÁSICO E AVANÇADO

Tamanho: px
Começar a partir da página:

Download "PL/SQL9i BÁSICO E AVANÇADO"

Transcrição

1 Relacional Consultoria e Sistemas Rua da Candelária, 60 10º andar Tel.: (0xx21) claudiad@relacional.com.br Copyright Lúcia M. A. Fernandes Diretora de Tecnologia e Treinamento luciaaf@relacional.com.br PL/SQL9i BÁSICO E AVANÇADO

2 CAPÍTULO 1: INTRODUÇÃO...8 ESTRUTURA...8 MODULARIDADE...9 ARQUITETURA...9 VANTAGENS DA PL/SQL...10 SUPORTE PARA SQL SUPORTE PARA PROGRAMAÇÃO ORIENTADA A OBJETO PERFORMANCE PORTABILIDADE PRODUTIVIDADE INTEGRAÇÃO COM O ORACLE EXEMPLO COMPONENTES DA LINGUAGEM...13 IDENTIFICADORES PALAVRAS RESERVADAS LITERAIS COMENTÁRIOS FIM DE LINHA VARIÁVEIS...17 TIPOS DE DADOS...17 ESCALARES COMPOSTOS CONSTANTES...33 %TYPE...34 ATRIBUIÇÃO...35 ESCOPO E VISIBILIDADE...36 QUALIFICAÇÃO...38 RESTRIÇÕES...39 CONVERSÃO IMPLÍCITA...41 COMANDOS...43 IF SELECT INTO GOTO NULL CASE FUNÇÕES...52 FUNÇÕES DE SQL VÁLIDAS EM PL/SQL FUNÇÕES DE SQL INVÁLIDAS EM PL/SQL SQLCODE ÍNDICE - I

3 SQLERRM LABORATÓRIO CAPÍTULO 2: PROCESSAMENTO REPETITIVO...59 CURSOR...59 DECLARAÇÃO ABERTURA FETCH %ROWTYPE FECHAMENTO CURSORES IMPLÍCITOS...66 %FOUND %NOTFOUND %ISOPEN %ROWCOUNT UPDATE PARA CURSOR...70 DELETE PARA CURSOR...71 OUTROS COMANDOS PARA PROCESSAMENTO REPETITIVO...72 LOOP EXIT WHILE FOR LOOP CURSOR LOOP LABORATÓRIO CAPÍTULO 3: TRATAMENTO DE ERRO...82 VANTAGENS DAS EXCEPTIONS...83 DEFININDO EXCEPTIONS...83 EXCEPTIONS PRÉ-DEFINIDAS CAUSANDO UMA EXCEPTION...88 O VERBO RAISE A PRAGMA EXCEPTION_INIT A PROCEDURE RAISE_APPLICATION_ERROR PROPAGAÇÃO DA EXCEÇÃO...92 DETERMINANDO O ERRO RECEBIDO...95 AS FUNÇÕES SQLCODE E SQLERRM WHEN OTHERS EXCEPTIONS ADQUIRIDAS NA DECLARAÇÃO LABORATÓRIO 3:...98 CAPÍTULO 4: TABELAS E REGISTROS INDEX-BY TABLES DECLARAÇÃO E ATRIBUIÇÃO ÍNDICE - II

4 MANIPULANDO INDEX-BY TABLES MÉTODOS EXCEPTIONS PARA COLEÇÕES CRIANDO MATRIZES REGISTROS DECLARAÇÕES REFERENCIANDO REGISTROS MANIPULANDO REGISTROS LABORATÓRIO 4: CAPÍTULO 5: BULK BIND CONCEITOS O COMANDO FORALL A CLÁUSULA BULK COLLECT O ATRIBUTO %BULK_ROWCOUNT O ATRIBUTO %BULK_EXCEPTIONS OS DEMAIS ATRIBUTOS CARACTERÍSTICAS OU RESTRIÇÕES LABORATÓRIO 5: CAPÍTULO 6: SUBPROGRAMAS CONCEITO CARACTERÍSTICAS DOS SUBPROGRAMAS PARÂMETROS MODOS DOS PARÂMETROS PASSAGEM DE PARÂMETRO POR REFERÊNCIA VALOR DEFAULT NOTAÇÃO POSICIONAL E NOMEADA PARA PASSAGEM DOS PARÂMETROS DECLARAÇÕES FORWARD OVERLOADING STORED SUBPROGRAM USO DE FUNÇÕES EM COMANDOS DE SQL VERIFICANDO ERROS DE COMPILAÇÃO PRIVILÉGIOS EM ROTINAS ARMAZENADAS USANDO AUTHID CURRENT_USER REFERÊNCIAS EXTERNAS CUIDADOS ADICIONAIS USO DE COLEÇÕES E REGISTROS EM PARÂMETROS USANDO FUNÇÕES PARA A CRIAÇÃO DE ÍNDICES LABORATÓRIO 6: CAPÍTULO 7: PACKAGES CONCEITO ÍNDICE - III

5 PACKAGE SPECIFICATION PACKAGE BODY RESTRIÇÕES USANDO PACKAGES USANDO PACOTES PARA TROCA DE INFORMAÇÕES OVERLOADING USO DE FUNÇÕES DE PACOTES EM COMANDOS SQL NÍVEL DE PUREZA A PRAGMA RESTRICT REFERENCES NÍVEL DE PUREZA E OVERLOADING NIVEL DE PUREZA E COMANDOS DE SQL RESTRIÇÕES O ARGUMENTO TRUST ALGUNS PACOTES DO ORACLE PACKAGE STANDARD PACKAGE DBMS_STANDARD PACKAGE DBMS_OUTPUT PACKAGE DBMS_PIPE PACKAGE UTL_FILE PACKAGE DBMS_SQL PACKAGE DBMS_ALERT PACKAGE DBMS_RANDOM PACKAGE DBMS_FLASHBACK PACKAGE DBMS_LOB PACKAGE DBMS_ROWID PACKAGE UTL_HTTP LABORATÓRIO 7: CAPÍTULO 8: O PACOTE DBMS_OUTPUT CONCEITO ROTINAS DO PACOTE ENABLE DISABLE PUT NEW_LINE PUT_LINE GET_LINE GET_LINES EXEMPLO USANDO O SQL*PLUS EXEMPLO USANDO OUTRO PROGRAMA LABORATÓRIO 8: CAPÍTULO 9: O PACOTE UTL_FILE ÍNDICE - IV

6 CONCEITO CONHECENDO O PACOTE FOPEN FOPEN_NCHAR IS_OPEN FCLOSE FCLOSE_ALL GET_LINE GET_LINE_NCHAR PUT PUT_NCHAR NEW_LINE PUT_LINE PUT_LINE_NCHAR FFLUSH PUTF PUTF_NCHAR UM EXEMPLO DE LEITURA UM EXEMPLO DE GRAVAÇÃO LABORATÓRIO 9: CAPÍTULO 10: O PACOTE DBMS_RANDOM INTRODUÇÃO LABORATÓRIO 10: CAPÍTULO 11: VARIÁVEIS CURSOR CONCEITO VANTAGENS DEFINIÇÃO MANIPULANDO VARIÁVEIS CURSOR RESTRIÇÕES PARA VARIÁVEIS CURSOR EXPRESSÕES CURSOR RESTRIÇÕES RELATIVAS A EXPRESSÕES CURSOR LABORATÓRIO 11: CAPÍTULO 12: SQL DINÂMICO EM PL/SQL CONCEITO USANDO SQL DINÂMICO O COMANDO EXECUTE IMMEDIATE OS COMANDOS OPEN-FOR, FETCH E CLOSE PASSANDO UM ARGUMENTO NULL BULK DINÂMICO LABORATÓRIO 12: ÍNDICE - V

7 CAPÍTULO 13: TRIGGERS CONCEITO EVENTO TIPO AÇÃO RESTRIÇÕES TABELAS MUTANTES E RESTRITAS COMPILANDO TRIGGERS ALTER TRIGGER TRIGGERS COM EVENTOS DE DDL E DATABASE TRIGGERS E STORED PROCEDURES TRANSAÇÕES AUTÔNOMAS TRANSAÇÕES AUTÔNOMAS VERSUS DEPENDENTES ERROS POSSÍVEIS COMPILANDO PL/SQL PARA EXECUÇÃO NATIVA LABORATÓRIO 13: CAPÍTULO 14: EXTERNAL PROCEDURES - JAVA INTRODUÇÃO CRIANDO A INTERFACE DEFININDO A BIBLIOTECA REGISTRANDO CADA ROTINA LABORATÓRIO 14: CAPÍTULO 15: TABELAS DO CURSO TABELA DE DEPARTAMENTOS DADOS DESCRIÇÃO TABELA DE FUNCIONÁRIOS DADOS DESCRIÇÃO TABELA DE ATIVIDADES DADOS DESCRIÇÃO TABELA DE PROJETOS DADOS DESCRIÇÃO TABELA DE PROJETOS X ATIVIDADES DADOS DESCRIÇÃO CAPÍTULO 16: RESPOSTAS DOS LABORATÓRIOS ÍNDICE - VI

8 LABORATÓRIO LABORATÓRIO LABORATÓRIO 3: LABORATÓRIO 4: LABORATÓRIO 5: LABORATÓRIO 6: LABORATÓRIO 7: LABORATÓRIO 8: LABORATÓRIO 9: LABORATÓRIO 10: LABORATÓRIO 11: LABORATÓRIO 12: LABORATÓRIO 13: LABORATÓRIO 14: ÍNDICE - VII

9 CAPÍTULO 1: INTRODUÇÃO A PL/SQL é uma linguagem procedural da Oracle que estende a SQL com comandos que permitem a criação de procedimentos de programação. Com ela, podemos usar comandos de SQL DML para manipular os dados da base de dados Oracle e estabelecer fluxos de controle para processar estes dados. A linguagem permite a declaração de constantes, variáveis, subprogramas (procedures e funções), que favorecem a estruturação de código, e possui mecanismos para controle de erros de execução. Incorpora os novos conceitos de objeto, encapsulamento e, ainda, permite a interface com rotinas escritas em outras linguagens. ESTRUTURA A PL/SQL é uma linguagem estruturada em blocos. Cada bloco pode conter qualquer número de subblocos. Um bloco permite que se façam declarações locais ao bloco, que deixam de existir quando o bloco termina. DECLARE <declarações>... BEGIN <lógica>... EXCEPTION <erros>... END; opcional obrigatória opcional A sintaxe acima apresenta a estrutura de um bloco PL/SQL, que é composto de três partes: Uma parte declarativa, onde definimos as variáveis locais àquele bloco. Uma parte de lógica, onde definimos a ação que aquele bloco deve realizar, incluindo a declaração de outros blocos subordinados (ou embutidos) a este. Uma parte de tratamento de erros, que permite que tenhamos acesso ao erro ocorrido e à determinação de uma ação de correção. Nessa parte, também podemos declarar outros blocos subordinados. CAPÍTULO 1: INTRODUÇÃO - 8

10 MODULARIDADE Modularidade é um conceito que determina a divisão do programa em módulos com ações bem definidas, que visam a facilitar o entendimento e a manutenção. Um problema complexo poderia ser subdividido em problemas menos complexos que, por sua vez, poderiam ser novamente subdivididos até que obtivéssemos problemas simples com soluções de fácil implementação. A PL/SQL, por possuir uma estrutura de blocos, favorece a modularidade. Além de blocos anônimos, temos a possibilidade de criar procedures e funções armazenadas na base de dados e compartilhadas por outras aplicações, ou packages que permitem que grupemos procedures, funções e variáveis relacionadas. ARQUITETURA A PL/SQL não é um produto independente; podemos considerá-la um módulo executor de blocos e subprogramas. Esse módulo pode ser instalado no Oracle Server e nas ferramentas de Alunoolvimento da Oracle (Forms Builder, Report Builder, etc.). Estes dois ambientes são independentes e podem conter, até mesmo, versões diferentes da PL/SQL. Esse módulo, no entanto, trabalha da mesma forma: ele é capaz de tratar os comandos de PL/SQL, mas não os comandos de SQL, que devem ser resolvidos por mecanismos internos do Oracle Server. Em ferramentas que possuem esse módulo embutido, a ferramenta passa para seu módulo executor local o bloco de PL/SQL que pode ser processado no próprio ambiente, com a exceção dos comandos de SQL encontrados. Grande parte do trabalho é realizada localmente, sem necessidade de envio de informações para o ambiente servidor. Em ferramentas que não têm esse módulo embutido, tais como SQL*Plus e Enterprise Manager, torna-se necessário o envio de todo o bloco para o servidor, para que este acione o seu módulo executor local e processe o bloco de PL/SQL. CAPÍTULO 1: INTRODUÇÃO - 9

11 VANTAGENS DA PL/SQL A PL/SQL oferece as seguintes vantagens: SUPORTE PARA SQL A PL/SQL permite a utilização, integrada no código, dos comandos da SQL DML, das funções de SQL, de comandos de controle de cursor e dos comandos para controle da transação (Commit, Rollback, etc.). SUPORTE PARA PROGRAMAÇÃO ORIENTADA A OBJETO Quando criamos um tipo objeto, definimos suas características através de seus atributos e métodos. Os métodos são escritos em PL/SQL. Na criação de um bloco de PL/SQL, podemos declarar variáveis com quaisquer dos tipos pré-definidos existentes no banco de dados ou com os tipos criados pelo usuário, inclusive tipos objeto. PERFORMANCE A utilização da PL/SQL pode reduzir o tráfego na rede pelo envio de um bloco contendo diversos comandos de SQL grupados em blocos para o Oracle. Isto é possível em um Oracle Precompiler ou OCI (Oracle Call Interface). A PL/SQL também adiciona performance às ferramentas que possuem um módulo executor local, pois não necessitam enviar comandos de PL/SQL para serem processados pelo servidor, sendo enviados apenas os comandos de SQL. Adicionalmente, a criação de programas armazenados no banco de dados (stored subprogram) pode reduzir não só o tráfego na rede como também a programação quando estabelecemos ações que podem ser compartilhadas em diversas aplicações. PORTABILIDADE Aplicações escritas em PL/SQL são portáveis para qualquer sistema operacional e plataforma nos quais o Oracle execute. Não há necessidade de customização. Isso significa que podemos escrever programas ou bibliotecas de programas que podem ser utilizados em ambientes diferentes. CAPÍTULO 1: INTRODUÇÃO - 10

12 PRODUTIVIDADE O aprendizado da PL/SQL pode ser aproveitado no Alunoolvimento de aplicações batch, online, relatórios, etc. No Alunoolvimento de um programa utilizando uma ferramenta tal como Forms Builder ou Report Builder, já estaremos familiarizados com as construções da lógica de programação, pois trata-se da mesma PL/SQL usada para Alunoolvimento das aplicações em batch. INTEGRAÇÃO COM O ORACLE As variáveis usadas pela PL/SQL podem ter os mesmos tipos existentes no banco de dados, tanto os tipos predefinidos quanto aqueles definidos pelos usuários. Os atributos %TYPE e %ROWTYPE permitem a integração com o dicionário de dados Oracle, pois poderemos declarar uma variável com o mesmo tipo de uma coluna definida em uma tabela do banco de dados. Essa facilidade produz independência do dado, reduz os custos de manutenção e permite que os programas se adaptem às mudanças ocorridas no banco de dados. CAPÍTULO 1: INTRODUÇÃO - 11

13 EXEMPLO SQL> SELECT vl_sal FROM func WHERE cd_mat = 150; VL_SAL SQL>DECLARE 2 Wrowid ROWID; 3 Sal NUMBER(5); 4 BEGIN 5 SELECT vl_sal, rowid 6 INTO Sal, Wrowid 7 FROM func -- obtém o salário 8 WHERE cd_mat = 150; 9 /* 10 Atualiza os valores de salário */ 13 UPDATE func 14 SET vl_sal = Sal * WHERE rowid = Wrowid; END; 18 / PL/SQL procedure successfully completed. SQL> SELECT vl_sal FROM func WHERE cd_mat = 150; VL_SAL OBS: Observe que a indicação de fim de comando, em PL/SQL, é feita com um ponto e vírgula (;). Este assunto será visto em detalhes mais adiante. CAPÍTULO 1: INTRODUÇÃO - 12

14 COMPONENTES DA LINGUAGEM IDENTIFICADORES Um identificador consiste de uma letra seguida de outras letras, números, $ (dólar), _ (sublinhado) e # (símbolo numérico). Possui um limite máximo de 30 caracteres. As letras podem ser maiúsculas ou minúsculas indiscriminadamente, pois a linguagem não é sensível à forma. Opcionalmente, os identificadores podem ser declarados (e usados) entre aspas. Com essa sintaxe, podemos declarar variáveis com outros caracteres além daqueles estabelecidos no início do texto (exceto aspas). O tamanho continua limitado a 30 caracteres (excluindo-se as aspas). 2 WTESTE NUMBER; 3 "ID DE FUNC" NUMBER; 4 "abc def" NUMBER; 5 BEGIN 6 WTESTE := 10; 7 "ID DE FUNC" := 20; 8 "ABC DEF" := 30; 9 END; 10 / "ABC DEF" := 30; * ERRO na linha 8: ORA-06550: linha 8, coluna 3: PLS-00201: o identificador 'ABC DEF' deve ser declarado ORA-06550: linha 8, coluna 3: PL/SQL: Statement ignored L01_01 No exemplo acima, observamos que, quando declaramos uma variável entre aspas, seu uso passa a ser sensível à forma de escrever, ou seja, ficamos limitados à forma como declaramos a variável em relação às maiúsculas e minúsculas. CAPÍTULO 1: INTRODUÇÃO - 13

15 PALAVRAS RESERVADAS Alguns identificadores possuem um significado especial em PL/SQL e não devem ser utilizados na declaração de variáveis. 2 END VARCHAR2(10); 3 END_CASA VARCHAR2(20); 4 BEGIN 5 END := 'RUA A'; 6 END_CASA := 'RUA B S/N.'; 7 END; 8 / END VARCHAR2(10); * ERRO na linha 2: ORA-06550: linha 2, coluna 3: PLS-00103: Encontrado o símbolo "END" quando um dos seguintes símbolos era esperado: begin function package pragma procedure subtype type use <an identifier> <a double-quoted delimited-identifier> form current cursor O símbolo "begin foi inserido antes de "END" para continuar. ORA-06550: linha 3, coluna 17: PLS-00103: Encontrado o símbolo "VARCHAR2" quando um dos seguintes símbolos era esperado: :=. % ; O símbolo ":=" foi substituído por "VARCHAR2" para continuar. ORA-06550: linha 5, coluna 3: PLS-00103: Encontrado o símbolo "END" quando um dos seguintes símbolos era esperado: begin case declare exit for goto if loop mod null pragma raise return select update while with <an identifier> <a double-quoted delimited-identi ORA-06550: linha 7, coluna 4: PLS-00103: Encontrado o símbolo "end-of-file" quando um dos seguintes símbolos era esperado: begin case declare end exception exit for goto if loop mod null pragma raise return select update while w L01_02 No exemplo acima, podemos observar que o uso de um identificador, com o nome de END, causou vários erros de compilação. A utilização de END como parte do nome de identificadores não causa maiores prejuízos. Alternativamente, podemos declarar palavras reservadas como identificadores, desde que seu nome seja posto entre aspas. Essa forma de utilização das aspas não é encorajada pela Oracle. CAPÍTULO 1: INTRODUÇÃO - 14

16 LITERAIS Corresponde à representação explícita de um número, caracter, string ou boleano. NÚMERO Podemos usar dois tipos de literais numéricos: inteiros e reais. Podemos, ainda, representá-los usando notação científica. Inteiros: {3, 100, 017, -125, +096} Reais: {12.5, ,.78, 17., } Notação Científica: 12E3 (= 12*10 3 = 12000) ou 500e-4(=500*10-4 = 500/10000 =.05) OBS: A letra E utilizada na notação científica indica o expoente de 10 que será usado para multiplicar o número que aparece antes da letra. CARACTER Um literal caracter corresponde a um único caracter apresentado entre aspas simples (apóstrofos). Nesse caso PL/SQL é sensível à forma, isto é, A e a são diferentes. Como exemplo de literais caracteres, temos: S, 8, (, s. STRING Literais strings são uma seqüência de zero ou mais caracteres apresentados entre aspas simples (apóstrofes). Como exemplo de literais string, temos: abc, abc, ABC, A B C, $5.000,00, aspas duplas. BOLEANO Literais boleanos são os valores TRUE, FALSE e a indicação de ausência de valor NULL. CAPÍTULO 1: INTRODUÇÃO - 15

17 COMENTÁRIOS Um comentário em PL/SQL pode ser informado de duas formas: Dois hífens em qualquer ponto da linha torna o restante dela comentário. /* (início) e */ (fim) marcam uma região que será ignorada pelo compilador. Como restrição, temos que não podemos embutir um comentário em outro e, ainda, não podemos utilizar comentários com dois hífens em blocos de PL/SQL que venham a ser processados, dinamicamente, por um Oracle Precompiler, porque os caracteres de fim de linha são ignorados (não são considerados) e, desta forma, o fim do comentário não é percebido até o fim do bloco. Neste caso, devemos usar /* e */. 2 VALOR VARCHAR2(10); 3 END_CASA VARCHAR2(20); 4 BEGIN 5 VALOR := -- A atribuição será feita na outra linha 6 'RUA A'; 7 END_CASA := /* a atribuição virá a seguir */ 'RUA B S/N'; 8 END; 9 / L01_03 FIM DE LINHA A indicação de fim de linha de comando em PL/SQL é feita com um ponto-e-vírgula (;). Observe que o comportamento do SQL*Plus mudará quando encontrar o primeiro comando de PL/SQL, pois não aguardará mais o ponto-e-vírgula (;) para indicação de fim de comando. Para concluirmos a digitação de um programa, deveremos utilizar a barra (/) para encerrar e executar, ou o ponto (.) para encerrar sem executar. CAPÍTULO 1: INTRODUÇÃO - 16

18 VARIÁVEIS Cada constante ou variável possui um tipo de dado que especifica o formato de armazenamento, restrições e intervalo de valores. O dado pode ser simples ou composto. SINTAXE <variável> <tipo> [ NOT NULL ] [ {:= DEFAULT } <valor inicial> ] TIPOS DE DADOS ESCALARES São um conjunto de tipos de dados predefinidos e que não possuem componentes internos (não são subdivididos). BINARY_INTEGER Tipo de dado numérico para armazenamento de inteiros válidos no seguinte intervalo de valores: de ( ) e ( ). Um Binary_Integer possui um conjunto de subtipos (derivado do tipo básico Binary_Integer): Natural Com intervalo de valores válidos entre 0 a NaturalN Com intervalo de valores válidos entre 0 a e sem a possibilidade de associação de valores NULLS. Positive Com intervalo de valores válidos entre 1 a PositiveN Com intervalo de valores válidos entre 1 a e sem a possibilidade de associação de valores NULLS. SignType Restrito à seguinte lista de valores: -1, 0 e 1. CAPÍTULO 1: INTRODUÇÃO - 17

19 2 WNATURAL NATURAL; 3 WNATURAL_N NATURALN := 0; 4 WPOSITIVE POSITIVE; 5 WPOSITIVE_N POSITIVEN := 1; 6 WSIGNTYPE SIGNTYPE; 7 BEGIN 8 WNATURAL := 0; 9 WPOSITIVE := 1; 10 WSIGNTYPE := -1; 11 END; 12 / L01_04 No exemplo a declaração das variáveis de tipo NaturalN e PositiveN necessitou de um valor inicial (:=), uma vez que não admite NULL, e toda variável de PL/SQL sem valor inicial definido está implicitamente NULL. CAPÍTULO 1: INTRODUÇÃO - 18

20 NUMBER Tipo de dado numérico para armazenamento de valores fixos ou em ponto flutuante com precisão de até 38 dígitos e magnitude de 1.0E-130 a 9.99E125. Podemos especificar precisão e escala. Se não especificarmos precisão, o default é 38 (ou o maior tamanho válido para o sistema operacional, o que for menor). Escala pode variar de -84 a 127. Escalas negativas causam o arredondamento da parte inteira. SQL> VARIABLE P1 NUMBER SQL> VARIABLE P2 NUMBER SQL> VARIABLE P3 NUMBER 2 WNUM1 NUMBER; 3 WNUM2 NUMBER(38, -4); 4 WNUM3 NUMBER(38, 127); 5 BEGIN 6 WNUM1 := 9.99E125; 7 WNUM2 := 38925; 8 WNUM3 := E-130; 9 :P1 := WNUM1; 10 :P2 := WNUM2; 11 :P3 := WNUM3; 12 END; 13 / SQL> PRINT P ,990E+125 P P ,235E-113 L01_05 Inicialmente, declaramos três variáveis no SQL*Plus para recebermos o resultado das atribuições feitas no programa. O comando Print (de SQL*Plus) nos mostra o resultado. A variável wnum1 não teve seu valor alterado, pois a declaramos sem qualquer restrição quanto à precisão ou escala. Já a variável wnum2, por possuir uma escala negativa, causou o arredondamento da parte inteira do número que passou de para CAPÍTULO 1: INTRODUÇÃO - 19

21 A variável wnum3 perde os três últimos números informados, pois a escala é 127 e o valor é multiplicado por O tipo Number também possui um conjunto de subtipos (derivados do tipo básico Number): Decimal, Dec e Numeric armazenamento em ponto fixo com uma precisão máxima de 38 dígitos decimais. Double Precision, Float armazenamento em ponto flutuante com uma precisão máxima de 126 dígitos binários, o que equivale a 38 dígitos decimais. OBS: Para efetuarmos a conversão de precisão binária para precisão decimal, devemos multiplicar a precisão binária por e para realizar a operação inversa devemos multiplicar a precisão decimal por Real - armazenamento em ponto flutuante com uma precisão máxima de 63 dígitos binários, o que equivale a 18 dígitos decimais. Integer, Int e Smallint armazenamento de inteiros com uma precisão máxima de 38 dígitos. CAPÍTULO 1: INTRODUÇÃO - 20

22 PLS_INTEGER Tipo de dado numérico para armazenamento de inteiros válidos no seguinte intervalo de valores: de ( ) a ( ). É similar ao tipo Binary_Integer, porém é mais rápido para efetuar cálculos que um Binary_Integer ou um Number, pois utiliza machine arithmetic, enquanto os demais usam library arithmetic. Possui uma outra diferença em relação ao Binary_Integer no que se refere à detecção de Overflow. Quando efetuamos um cálculo usando variáveis Pls_Integer e o valor ultrapassa a capacidade máxima da variável, ocorre um erro de Overflow mesmo que a área receptora tenha capacidade de armazenamento (seja um Number, por exemplo). Já com Binary_Integer não ocorrerá qualquer erro se atribuirmos o resultado a um Number. 2 WNUM NUMBER; 3 WPLS PLS_INTEGER := ; 4 WBIN BINARY_INTEGER := ; 5 BEGIN 6 WNUM := WBIN + 1; 7 WNUM := WPLS + 1; 8 END; 9 / DECLARE * ERRO na linha 1: ORA-01426: esgotamento numérico ORA-06512: em line 7 L01_06 A recomendação da Oracle é que passemos a utilizar variáveis do tipo Pls_Integer nas novas aplicações para que possamos obter ganhos de performance. CAPÍTULO 1: INTRODUÇÃO - 21

23 CHAR Tipo de dado alfanumérico de tamanho fixo com comprimento de até bytes. Podemos especificar o tamanho máximo na declaração de uma variável com esse tipo. Caso isto não seja especificado, o comprimento default é de 1 byte. O comprimento é especificado em bytes e não em caracteres. Isto é importante quando armazenamos valores multibyte. O conjunto de valores válidos para armazenamento depende do charset do banco de dados. A definição de uma coluna do tipo Char no banco de dados está limitada a bytes. O tipo Char tem um único subtipo Character que possui as mesmas características de seu tipo básico. SQL> VARIABLE P1 VARCHAR2(100) 2 WCHAR CHAR(5); 3 BEGIN 4 WCHAR := 'ABC'; 5 :P1 := '*' WCHAR '*'; 6 END; 7 / SQL> PRINT P1 P *ABC * L01_07 Observe que a variável é completada com brancos à direita até atingir o comprimento especificado pelo tipo. CAPÍTULO 1: INTRODUÇÃO - 22

24 VARCHAR2 Tipo de dado alfanumérico de tamanho variável com comprimento de até bytes. A especificação de tamanho é obrigatória para uma variável declarada com esse tipo. O comprimento é especificado em bytes e não em caracteres. Isso é importante quando armazenamos valores multibyte. O conjunto de valores válidos para armazenamento depende do charset do banco de dados. A definição de uma coluna do tipo Varchar2 no banco de dados está limitada a bytes. O tipo Varchar2 possui os seguintes subtipos: String Possui as mesmas características do seu tipo básico. Considerado um sinônimo. Varchar Possui as mesmas características do seu tipo básico atualmente. Em versões futuras, se tornará um tipo separado com características de comparação diferentes do Varchar2. 2 WVARCHAR2 VARCHAR2(32767); 3 WVARCHAR VARCHAR(100); 4 BEGIN 5 WVARCHAR2 := 'ABC'; 6 WVARCHAR := WVARCHAR2; 7 :P1 := '*' WVARCHAR '*'; 8 END; 9 / SQL> PRINT P1 P *ABC* CAPÍTULO 1: INTRODUÇÃO - 23

25 LONG Tipo de dado alfanumérico de tamanho variável com comprimento de até bytes. Podemos especificar o tamanho máximo na declaração de uma variável com esse tipo. Uma coluna Long no banco de dados armazena até 2 GB ( bytes). Podemos fazer referência a colunas Long em comandos de DML Insert, Update e muitos comandos Select, mas não em expressões, chamadas de funções SQL, ou em certas cláusulas, tais como Where, Group By e Connect By. 2 WLONG LONG(32767); 3 BEGIN 4 WLONG := 'ABC'; 5 :P1 := '*' WLONG '*'; 6 END; 7 / SQL> PRINT P1 P *ABC* RAW Tipo de dado binário de tamanho variável com comprimento de até A especificação de tamanho, na declaração de uma variável com esse tipo, é obrigatória. São semelhantes a colunas Varchar2, porém a PL/SQL não interpreta seu conteúdo. O SQL*Net8 não realiza conversão entre charsets quando transmitimos dados Raw de um sistema para outro. Uma coluna Raw no banco de dados armazena até bytes. LONG RAW Tipo de dado binário de tamanho variável com comprimento de até A especificação de tamanho, na declaração de uma variável com este tipo, é obrigatória. São semelhantes a colunas Long, porém a PL/SQL não interpreta seu conteúdo. Uma coluna Long Raw no banco de dados armazena até 2 GB ( ). CAPÍTULO 1: INTRODUÇÃO - 24

26 ROWID Para armazenamento de valores Rowid do banco de dados. Cada tabela criada no banco de dados possui uma pseudocoluna Rowid que armazena valores hexadecimais que correspondem ao endereço de cada linha (row). A partir do Oracle8, os Rowids foram estendidos para suportar particionamento de tabelas e índices. Desta forma, foi adicionado ao valor já existente na release 7.3 um data object number, que identifica o segmento. Objetos criados no mesmo segmento, tais como as tabelas criadas em um cluster, possuem o mesmo data object number. SQL> SELECT CD_MAT, ROWID FROM FUNC 2 WHERE ROWNUM < 10; CD_MAT ROWID AAAH2LAAIAAAAAyAAy 10 AAAH2LAAIAAAAAyAAA 11 AAAH2LAAIAAAAAyAA1 12 AAAH2LAAIAAAAAyAA2 15 AAAH2LAAIAAAAAyAA3 20 AAAH2LAAIAAAAAyAAB 30 AAAH2LAAIAAAAAyAAC 50 AAAH2LAAIAAAAAyAAD 60 AAAH2LAAIAAAAAyAAE 9 linhas selecionadas. L01_10 Um Rowid contém o seguinte formato: Data object number Data file (onde o primeiro arquivo recebe o número 1) Data block in the data file Row in the data block (onde a primeira linha recebe o número 0) Uma vez que o Rowid representa o endereço da linha, torna-se o meio de acesso mais rápido para obtenção de informações de uma linha específica. Para destacarmos as informações de uma variável Rowid, usaremos as rotinas presentes no pacote Dbms_Rowid. CAPÍTULO 1: INTRODUÇÃO - 25

27 UROWID Armazena um Rowid lógico. Usado para captura do Rowid (lógico) de tabelas Index Organized. NCHAR Tipo de dado alfanumérico de tamanho fixo com comprimento de até bytes. Podemos especificar o tamanho máximo na declaração de uma variável com este tipo. Caso isso não seja especificado, o comprimento default é de 1 byte. O comprimento é especificado em bytes e não em caracteres. Isto é importante quando armazenamos valores multibyte. O conjunto de valores válidos para armazenamento depende do national charset (criado na versão 8 do Oracle e que permite o armazenamento de valores simultaneamente em dois charsets diferentes) definido para o banco de dados. As colunas alfanuméricas Nchar e Nvarchar2 obedecem ao national charset e as colunas Char, Varchar2 e Long, ao database charset. A definição de uma coluna do tipo Nchar no banco de dados está limitada a bytes. A definição de uma coluna do tipo Nchar no banco de dados está limitada a bytes. Podemos intercambiar valores entre colunas Nchar e Char, porém pode haver perda de informação se o charset da coluna Char não puder representar todo o conteúdo da coluna Nchar (aparecerão caracteres com?). NVARCHAR2 Tipo de dado alfanumérico de tamanho variável com comprimento de até bytes. A especificação de tamanho é obrigatória para uma variável declarada com este tipo. O comprimento é especificado em bytes e não em caracteres. Isso é importante quando armazenamos valores multi-byte. O conjunto de valores válidos para armazenamento depende do national charset (criado na versão 8 do Oracle e que permite o armazenamento de valores simultaneamente em dois charsets diferentes) definido para o banco de dados. As colunas alfanuméricas Nchar e Nvarchar2 obedecem ao national charset e as colunas Char, Varchar2 e Long, ao database charset. A definição de uma coluna do tipo Nvarchar2 no banco de dados está limitada a bytes. BOOLEAN É um tipo de dado para variáveis (não podem ser definidas como colunas em uma base de dados). Armazena valores lógicos True e False e a ausência de valor Null. Não possui tamanho e nem qualquer tipo de parâmetro. CAPÍTULO 1: INTRODUÇÃO - 26

28 DATE Tipo de dado para armazenamento de valores de data e hora. Os valores válidos variam de 01 de janeiro de 4712 A.C. até 31 de dezembro de 9999 D.C. Na definição de uma variável de tipo data, não especificamos comprimento. Podemos operar com variáveis de tipo data (da mesma forma que com colunas Date) adicionando ou subtraindo valores inteiros, usando as funções de SQL para data e subtraindo duas datas para obter o intervalo de dias. Quando associamos uma data a uma variável alfanumérica, ocorre a conversão automática de tipo, da mesma forma que ocorre quando associamos uma variável alfanumérica a uma variável de data. O layout default para a conversão depende do valor de Nls_Date_Format em vigor para a sessão. 2 WVARCHAR VARCHAR2(20); 3 WVARCHAR2 VARCHAR2(20) := '05/02/87'; 4 WDATE DATE; 5 WDATE2 DATE; 6 BEGIN 7 WDATE := TO_DATE(' ', 'DDMMYYYY'); 8 WVARCHAR := WDATE; 9 WDATE2 := WVARCHAR2; 10 :P1 := WVARCHAR ' - ' TO_CHAR(WDATE2, 'DDMMYYYY'); 11 END; 12 / SQL> PRINT P1 P /01/ L01_11 No exemplo acima percebemos que o formato default de data para a sessão era dd/mm/rr, uma vez que a atribuição de uma variável Varchar2 a uma variável Date foi interpretada corretamente. CAPÍTULO 1: INTRODUÇÃO - 27

29 TIMESTAMP Extensão ao tipo Date. Ano, mês e dia assim com hora, minuto, segundo e fração de segundo. Podemos indicar o número de dígitos da parte fracionária do segundo. TIMESTAMP WITH TIME ZONE Extensão ao tipo Timestamp. Inclui a apresentação da zona de tempo. Onde a zona de tempo corresponde à diferença (em horas e minutos) entre a hora local e UTC (hora de Greenwich). TIMESTAMP WITH LOCAL TIME ZONE Extensão ao tipo Timestamp. A diferença entre esta opção e a anterior é que a zona de tempo não é armazenada no banco de dados. O dado, quando armazenado, é normalizado para a Dbtimezone e, quando recuperado, é visualizado pelo usuário com a Time Zone da sessão (ocorre uma segunda conversão). INTERVAL DAY TO SECOND Armazena um período de tempo em dias, horas, minutos e segundos. INTERVAL YEAR TO MONTH Armazena um período de tempo em anos e meses. SQL> VARIABLE P1 VARCHAR2(1000) SQL> VARIABLE P2 VARCHAR2(1000) 2 WTM TIMESTAMP := CURRENT_TIMESTAMP; 3 WTM_TZ TIMESTAMP WITH TIME ZONE := SYSTIMESTAMP; 4 WTM_LTZ TIMESTAMP WITH LOCAL TIME ZONE := LOCALTIMESTAMP; 5 IDS INTERVAL DAY TO SECOND := 6 NUMTODSINTERVAL (1125.3, 'MINUTE'); 7 IYM INTERVAL YEAR TO MONTH := 8 NUMTOYMINTERVAL (25.3, 'MONTH'); 9 BEGIN 10 :P1 := WTM ' ' WTM_TZ ' ' WTM_LTZ; 11 :P2 := IDS ' ' IYM; 12 END; 13 / L01_12 CAPÍTULO 1: INTRODUÇÃO - 28

30 SQL> SET LINESIZE 90 SQL> PRINT P /05/03 14:22:08, /05/03 14:22:08, :00 25/05/03 14:22:08, P :45: P ,235E-113 Acima podemos observar que o padrão de apresentação para valores de timestamp já compreende data, hora, minuto, segundo e, para alguns, a zona de tempo. A variável Day To Second armazena um valor que pode conter dia (não é data), hora, minuto, segundo e fração. Já a variável do tipo Year To Month armazena anos e meses. CAPÍTULO 1: INTRODUÇÃO - 29

31 LOBS São um conjunto de tipos de dados predefinidos e que armazenam valores chamados locators, os quais especificam a localização dos lobs (large objects) armazenados na linha ou fora dela. Armazenam valores com comprimento de até 4 GB. Permitem o acesso randômico a trechos do dado. São diferentes dos tipos Long e Long Raw nos seguintes aspectos: Podem ser atributos (exceto Nclob) de tipos objeto, Longs não podem. O comprimento máximo é de 4 GB e dos Longs é 2 GB. Lobs suportam acesso randômico, enquanto Longs suportam somente acesso seqüencial. Pode-se declarar diversas colunas Lob em uma mesma tabela; Longs não são permitidos (somente 1). A PL/SQL opera com lobs através dos locators, ou seja, quando recuperamos o valor de uma coluna Lob, o que é obtido é o locator. Como restrição, temos que locators não podem ser guardados de uma transação (ou sessão) para outra: não podemos ler a informação, efetuar um Commit e utilizar a informação lida. Para manusearmos as informações de uma variável Lob, usaremos as rotinas presentes no pacote Dbms_Lob. Blob - O tipo Blob tem a capacidade de armazenar grandes valores binários. O tamanho máximo não pode exceder 4 GB. O armazenamento da informação pode ser feito na própria linha ou em outro espaço específico. Clob - O tipo Clob tem a capacidade de armazenar grandes volumes de dados alfanuméricos single-byte. O tamanho máximo não pode exceder 4 GB. O armazenamento da informação pode ser feito na própria linha ou em outro espaço específico. Nclob - O tipo Nclob tem a capacidade de armazenar grandes volumes de dados alfanuméricos single-byte ou multibyte do tipo Nchar. O tamanho máximo não pode exceder 4 GB. O armazenamento da informação pode ser feito na própria linha ou em outro espaço específico. CAPÍTULO 1: INTRODUÇÃO - 30

32 Bfile - O tipo Bfile tem a capacidade de armazenar grandes volumes de dados binários fora do banco de dados. O locator de um Bfile inclui um diretório que especifica o caminho completo do arquivo no servidor. O arquivo endereçado por um Bfile fica fora do banco de dados. No banco de dados, armazenamos apenas um locator (endereço) para o arquivo. Bfiles são read-only. Não podemos modificá-los. O Oracle não modifica o arquivo físico associado com o locator. O locator, naturalmente, pode ser modificado. O número máximo de Bfiles abertos é determinado pelo parâmetro de inicialização do banco de dados Session_Max_Open_Files. Bfiles não participam de transações. A integridade é de responsabilidade do sistema operacional do ambiente servidor. O tamanho do arquivo não pode exceder 4 GB. O DBA deve garantir que o arquivo exista e que o Oracle tenha permissão para acesso de leitura no diretório especificado. CAPÍTULO 1: INTRODUÇÃO - 31

33 COMPOSTOS São aqueles tipos que possuem componentes internos que podem ser manuseados individualmente. Nesse grupo, se encontram os tipos definidos pelo usuário: Table, Record e Varray. Serão vistos em tópicos específicos. REFERENCE São aqueles tipos que armazenam valores chamados ponteiros, que apontam para outros itens do programa ou do banco de dados. Fazem parte deste grupo os tipos Ref Cursor e Ref <object>, que também serão vistos em tópicos específicos. SUBTIPOS DEFINIDOS PELO USUÁRIO Cada tipo de PL/SQL define um conjunto de valores válidos e um conjunto de operações aplicáveis às variáveis declaradas com aquele tipo. Subtipos declaram o mesmo conjunto de operações, mas apenas um subconjunto de seus valores. 2 SUBTYPE DATA IS DATE NOT NULL; 3 SUBTYPE TEXTO IS VARCHAR2; 4 SUBTYPE CODIGO IS NUMBER; 5 DT_HOJE DATA := SYSDATE; 6 DESCRICAO TEXTO(100); 7 CD_MAT CODIGO(5); 8 BEGIN 9 DT_HOJE := SYSDATE; 10 DESCRICAO := 'TESTE DE SUBTIPO'; 11 CD_MAT := 12345; 12 :P1 := DESCRICAO '-' CD_MAT '-' DT_HOJE; 13 END; 14 / SQL> PRINT P1 P TESTE DE SUBTIPO /05/03 Podemos definir subtipos de um tipo básico e, posteriormente, uma variável com aquele tipo. As restrições estabelecidas para o subtipo devem ser respeitadas pelo item. CAPÍTULO 1: INTRODUÇÃO - 32

34 CONSTANTES A declaração de uma constante é semelhante à declaração de uma variável, exceto que devemos adicionar a palavra chave CONSTANT e, imediatamente, associar uma valor inicial. Seu valor não poderá ser alterado durante o programa. SINTAXE <nome da constante> CONSTANT <tipo> { := / DEFAULT } <valor inicial> 2 CONSTANTE CONSTANT REAL := 5; 3 ZERO CONSTANT PLS_INTEGER := 0; 4 BRANCO CONSTANT VARCHAR2(1) := ' '; 5 BEGIN 6 :MSG := CONSTANTE '*' ZERO '*' BRANCO '*'; 7 END; 8 / PL/SQL procedure successfully completed. MSG *0* * CAPÍTULO 1: INTRODUÇÃO - 33

35 %TYPE O atributo %Type copia o tipo de dado de uma variável ou coluna do banco de dados. Podemos, desta forma, declarar outra variável baseada na definição de uma coluna do banco de dados ou baseada na definição de outra variável. Isso é particularmente usado quando declaramos variáveis que venham a receber informações de colunas do banco de dados. A utilização de %Type favorece a independência de dados, uma vez que não precisamos saber exatamente o tipo de dado da variável a ser declarada e, caso haja modificações no objeto original, a modificação da variável cópia é feita automaticamente. 2 V_COD NUMBER(4) := 0; 3 V_DATA DATE NOT NULL := SYSDATE; WCOD V_COD%TYPE NOT NULL := 1234; 6 WDATA V_DATA%TYPE := SYSDATE; WDEP DEPTO.CD_DEPTO%TYPE; 9 BEGIN 10 WDEP := NULL; 11 V_COD := 1; 12 WDATA := NULL; 13 END; 14 / WDATA := NULL; * ERRO na linha 12: ORA-06550: linha 12, coluna 14: PLS-00382: a expressão é do tipo incorreto ORA-06550: linha 12, coluna 3: PL/SQL: Statement ignored L01_14 Observe que a variável wdata se baseou na variável v_data, cuja cláusula Not Null também foi copiada (esta a causa do erro). Já a variável wdep, que é baseada na coluna cd_depto da tabela Depto, não tem a obrigatoriedade de Not Null, apesar de esta restrição estar presente na coluna do banco de dados. Concluímos, então, que, quando a variável está baseada em uma coluna do banco de dados, são copiados apenas seu tipo e tamanho, enquanto a restrição existente também é copiada quando a variável original é local. CAPÍTULO 1: INTRODUÇÃO - 34

36 ATRIBUIÇÃO A atribuição de valor a uma variável é feita com a notação :=. As variáveis e constantes são criadas e recebem seu valor inicial cada vez que for iniciado o bloco no qual estão declaradas. Na ausência de atribuição de valor inicial, a variável é considerada sem valor ou Null. É muito importante, portanto, que as variáveis sejam inicializadas antes do uso. SQL> VARIABLE RETORNO NUMBER 2 V1 NUMBER := 1; 3 V2 NUMBER; 4 BEGIN 5 V1 := V1 + V2; 6 :RETORNO := V1 * 2; 7 END; 8 / SQL> PRINT RETORNO RETORNO L01_15 O resultado do programa foi Null, porque fizemos uma operação incluindo uma variável sem valor; desta forma, o resultado torna-se também sem valor. Isto ocorrerá sempre que fizermos uma operação incluindo uma variável sem valor. CAPÍTULO 1: INTRODUÇÃO - 35

37 ESCOPO E VISIBILIDADE O escopo de uma variável é a região (bloco, subprograma ou pacote) onde a referência a ela é válida. Dentro de um mesmo escopo, todas as variáveis devem ter nomes únicos. Uma variável declarada em um bloco é visível nesse e em todos os blocos subordinados a ele. Se uma variável é redefinida em um sub-bloco, ambas são acessíveis. No sub-bloco, porém, qualquer referência não qualificada fará acesso à variável de nível mais interno. Uma variável declarada em um bloco deixa de existir quando o bloco termina. SQL> VARIABLE MSG VARCHAR2(200) 2 WNUM NUMBER := 12; 3 WCHAR VARCHAR2(20) := 'WCHAR EXTERNA'; 4 WUNICO NUMBER := 5; 5 BEGIN 6 DECLARE 7 WNUM NUMBER := 10; 8 WCHAR VARCHAR2(20) := 'WCHAR INTERNA'; 9 WTOTAL NUMBER; 10 BEGIN 11 WTOTAL := WNUM + WUNICO; 12 :MSG := WCHAR '-' WTOTAL; 13 END; 14 END; 15 / SQL> PRINT MSG MSG WCHAR INTERNA-15 L01_16 Pudemos comprovar que no bloco interno, por default, a referência é sempre à variável local. CAPÍTULO 1: INTRODUÇÃO - 36

38 A seguir, faremos referência à variável wtotal no bloco principal e receberemos um erro indicando que neste bloco não há declaração da variável wtotal. Esta variável deixa de existir quando passarmos pelo End do sub-bloco. 2 WNUM NUMBER := 12; 3 WCHAR VARCHAR2(20) := 'WCHAR EXTERNA'; 4 WUNICO NUMBER := 5; 5 BEGIN 6 DECLARE 7 WNUM NUMBER := 10; 8 WCHAR VARCHAR2(20) := 'WCHAR INTERNA'; 9 WTOTAL NUMBER; 10 BEGIN 11 WTOTAL := WNUM + WUNICO; 12 :MSG := WCHAR '-' WTOTAL; 13 END; 14 WTOTAL := WTOTAL + 1; 15 END; 16 / WTOTAL := WTOTAL + 1; * ERRO na linha 14: ORA-06550: linha 14, coluna 3: PLS-00201: o identificador 'WTOTAL' deve ser declarado ORA-06550: linha 14, coluna 3: PL/SQL: Statement ignored L01_17 CAPÍTULO 1: INTRODUÇÃO - 37

39 QUALIFICAÇÃO Para controlarmos a visibilidade e termos acesso às variáveis dos blocos de nível superior, devemos qualificar qualquer referência às variáveis externas nos blocos internos. SQL> BEGIN 2 <<EXT>> 3 DECLARE 4 WCOD NUMBER := 1; 5 BEGIN 6 DECLARE 7 WCOD NUMBER:= 5; 8 BEGIN 9 IF WCOD <> EXT.WCOD THEN 10 :MSG := 'DIFERENTE'; 11 ELSE 12 :MSG := 'IGUAL'; 13 END IF; 14 END; 15 END; 16 END; 17 / SQL> PRINT MSG MSG DIFERENTE L01_18 A qualificação pode ser feita com o uso de um Label ou com o nome de um subprograma (será visto no tópico referente a subprogramas). CAPÍTULO 1: INTRODUÇÃO - 38

40 RESTRIÇÕES O PL/SQL não admite referências a variáveis não declaradas, mesmo que elas venham a ser declaradas posteriormente. Para que utilizemos uma variável (mesmo sendo na declaração de outra), devemos ter efetuado sua declaração primeiro. 2 WCOD NUMBER := WVAL + 1; 3 WVAL NUMBER := 0; 4 BEGIN 5 WCOD := 1; 6 END; 7 / WCOD NUMBER := WVAL + 1; * ERRO na linha 2: ORA-06550: linha 2, coluna 30: PLS-00320: a declaração do tipo desta expressão está incompleta ou incorreta ORA-06550: linha 2, coluna 20: PL/SQL: Item ignored ORA-06550: linha 5, coluna 3: PLS-00320: a declaração do tipo desta expressão está incompleta ou incorreta ORA-06550: linha 5, coluna 3: PL/SQL: Statement ignored L01_19 A declaração de variáveis deve ser feita de forma unitária. Não podemos declarar, de uma vez, diversas variáveis referentes a um mesmo tipo. 2 A, B, C NUMBER; 3 BEGIN 4 A:= 0; 5 END; 6 / A, B, C NUMBER; * ERRO na linha 2: ORA-06550: linha 2, coluna 4: PLS-00103: Encontrado o símbolo "," quando um dos seguintes símbolos era esperado: constant exception <an identifier> <a double-quoted delimited-identifier> table LONG_ double ref char time timestamp interval date binary national character nchar L01_20 CAPÍTULO 1: INTRODUÇÃO - 39

41 No exemplo abaixo foi feita a declaração de três variáveis boleanas. A primeira e a segunda formas de atribuição são ilegais, porque não é possível a conversão de valores entre valores numéricos e variáveis boleanas ou entre valores alfanuméricos e variáveis boleanas, porém a terceira forma de atribuição é válida; se a expressão for verdadeira, será atribuído True à variável, caso contrário, False. 2 WB1 BOOLEAN; 3 WB2 BOOLEAN; 4 WB3 BOOLEAN; 5 BEGIN 6 WB1 := 1; 7 WB2 := 'TRUE'; 8 WB3 := (5 > 3); 9 END; 10 / WB1 := 1; * ERRO na linha 6: ORA-06550: linha 6, coluna 10: PLS-00382: a expressão é do tipo incorreto ORA-06550: linha 6, coluna 3: PL/SQL: Statement ignored ORA-06550: linha 7, coluna 10: PLS-00382: a expressão é do tipo incorreto ORA-06550: linha 7, coluna 3: PL/SQL: Statement ignored L01_21 CAPÍTULO 1: INTRODUÇÃO - 40

42 CONVERSÃO IMPLÍCITA Quando atribuímos uma variável de um determinado tipo a uma outra variável de outro tipo, ocorre uma conversão implícita de tipo de dado. A conversão implícita é possível em PL/SQL, mas não é recomendada, porque pode dificultar a performance e, ainda, sofrer modificações de uma versão para outra do software. A tabela a seguir indica o que é possível converter: Tipo B_Integer Blob Char CLOB Date Long Number P_Integer Raw Urowid Varchar2 B_Integer S S S S S Blob S Char S S S S S S S S S Clob S S Date S S S Long S S S Number S S S S S P_Integer S S S S S Raw S S S S Urowid S S Varchar2 S S S S S S S S S Devemos tomar cuidado adicional com as conversões implícitas, pois o PL/SQL utiliza as funções de SQL, porém, com os parâmetros de formato defaults. Assim, a execução de uma rotina em um servidor pode produzir um resultado, enquanto em outro poderá produzir outro em função de parâmetros de ambiente (Nls, por exemplo). CAPÍTULO 1: INTRODUÇÃO - 41

43 2 DT_HOJE DATE := SYSDATE; 3 DESCRICAO VARCHAR2(100) := '123'; 4 CD_MAT NUMBER(5) := 0; 5 BEGIN 6 CD_MAT := DESCRICAO; 7 DESCRICAO := DT_HOJE; 8 :P1 := DESCRICAO '-' CD_MAT '-' DT_HOJE; 9 END; 10 / SQL> PRINT P1 P /05/ /05/03 L01_22 No exemplo, as atribuições não resultaram em erros, pois os valores eram compatíveis. Qual o resultado obtido se a variável Descrição fosse inicializada com o valor abc em vez de 123? CAPÍTULO 1: INTRODUÇÃO - 42

44 COMANDOS IF O comando IF verifica uma condição, e dependendo do resultado realiza uma ou outra ação. Permite a execução condicional de uma determinada ação. SINTAXE IF <condição> THEN <seqüência de comandos> END IF; IF <condição> THEN <seqüência de comandos> ELSE <seqüência de comandos> END IF; IF <condição> THEN <seqüência de comandos> ELSIF <condição> THEN <seqüência de comandos> ELSE <seqüência de comandos> END IF; A sintaxe acima contém as formas básica de um comando IF. Nas três formas sintáticas, observamos a presença do End If para encerrar o comando. Na terceira forma sintática (IF..ELSIF END IF), mais especificamente, apenas um End If é necessário, independente da quantidade de Elsif s presentes no comando. Devemos considerar que o End If encerra o IF isolado. CAPÍTULO 1: INTRODUÇÃO - 43

45 CONDIÇÃO CAPÍTULO 1: INTRODUÇÃO - 44

46 SQL> VARIABLE MSG VARCHAR2(100) 2 VALOR NUMBER := &VAL; 3 BEGIN 4 IF VALOR > 0 THEN 5 :MSG := 'Valor maior que zero'; 6 ELSIF VALOR = 0 THEN 7 :MSG := 'Valor igual a zero'; 8 ELSE 9 :MSG := 'Valor menor que zero'; 10 END IF; 11 END; 12 / Entre o valor para val: -5 antigo 2: VALOR NUMBER := &VAL; novo 2: VALOR NUMBER := -5; SQL> PRINT MSG MSG Valor menor que zero L01_23 No exemplo, declaramos, mais uma vez, uma variável no ambiente SQL*Plus e a utilizamos dentro do programa PL/SQL. Este tipo de variável é chamado de Bind, pois está declarada no ambiente e não no programa. Usaremos freqüentemente este tipo de variável para retornar informação para o SQL*Plus. CAPÍTULO 1: INTRODUÇÃO - 45

47 SELECT INTO Dentro da PL/SQL, o comando Select ganha a cláusula Into a fim de obter dados da linha lida para variáveis do programa. Desta forma, poderemos manusear os dados obtidos. A cláusula Into segue imediatamente a lista de variáveis da cláusula Select e precede a cláusula From. Devemos informar uma área de recepção capaz de comportar todos os dados lidos; caso contrário, receberemos erro na execução. O comando Select Into somente faz leitura de uma row. Caso venhamos a selecionar mais de uma row usando este comando, ocorrerá um erro (Too Many Rows) indicando o excesso. A leitura de diversas rows é feita com o uso do Cursor (será visto mais adiante). 2 SALARIO NUMBER; 3 ENDROW ROWID; 4 BEGIN 5 SELECT VL_SAL, ROWID INTO SALARIO, ENDROW 6 FROM FUNC 7 WHERE CD_MAT = 150; 8 IF SALARIO < 2000 THEN 9 SALARIO := SALARIO * 1.3; 10 ELSIF SALARIO IS NULL THEN 11 SALARIO := 1500; 12 ELSE 13 SALARIO := SALARIO * 1.15; 14 END IF; 15 UPDATE FUNC SET VL_SAL = SALARIO 16 WHERE ROWID = ENDROW; 17 :MSG := 'Salário = ' SALARIO; 18 COMMIT; 19 END; 20 / SQL> PRINT MSG MSG Salário = 3517,712 Fizemos uma leitura e aproveitamos para trazer o Rowid da linha, de tal forma que a atualização se processasse de forma mais rápida. CAPÍTULO 1: INTRODUÇÃO - 46

48 O comando Select fez referência a duas colunas, portanto, na cláusula Into, informamos duas variáveis para receber os dados lidos na mesma ordem da seleção. Nesse Select, tínhamos a certeza da quantidade de linhas retornadas uma vez que a pesquisa foi feita pela PK, resultando em uma única linha de retorno. GOTO O comando GoTo efetua um desvio incondicional para um Label. O Label deve ser único dentro do escopo e deve preceder um comando ou um bloco PL/SQL. Além de ser usado para desvios, um Label também serve como qualificador de variáveis, como foi mostrado no item Qualificação. Veremos no próximo capítulo que a PL/SQL possui diversas estruturas de iteração e que raramente teremos necessidade de utilizar um comando GoTo. 2 CONTA NUMBER := 0; 3 BEGIN 4 <<INICIO>> 5 CONTA := CONTA + 1; 6 IF CONTA < 5 THEN 7 GOTO INICIO; 8 END IF; 9 END; 10 / L01_25 No exemplo, aparece um Label (início) que deve ser codificado entre << e >>. No comando GoTo, os símbolos (<< e >>) não devem ser usados. RESTRIÇÕES Existem algumas situações em que o comando GoTo não pode ser usado: Desvio para dentro de um IF ou Loop (GoTo Proximo_IF). Desvio para dentro de um subbloco (GoTo Subbloco). Desvio para fora de um subprograma (GoTo Para_Fora). Desvio para dentro de um bloco a partir da área de exceção (GoTo Inicio). CAPÍTULO 1: INTRODUÇÃO - 47

Oracle PL/SQL Overview

Oracle PL/SQL Overview Faculdades Network Oracle PL/SQL Overview Prof. Edinelson PL/SQL Linguagem de Programação Procedural Language / Structured Query Language Une o estilo modular de linguagens de programação à versatilidade

Leia mais

Introdução ao SQL. O que é SQL?

Introdução ao SQL. O que é SQL? Introdução ao SQL 1 O que é SQL? Inicialmente chamada de Sequel, SQL (Structured Query Language), é a linguagem padrão utilizada para comunicar-se com um banco de dados relacional. A versão original foi

Leia mais

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL Laboratório de Banco de Dados Prof. Luiz Vivacqua PL/pgSQL A Linguagem de programação do PostgreSQL 1) Visão Geral A PL/pgSQL é uma linguagem de programação procedural para o Sistema Gerenciador de Banco

Leia mais

PL/SQL. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados PL/SQL

PL/SQL. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados PL/SQL PL/SQL Laboratório de Bases de Dados PL/SQL Program Language SQL linguagem de programação da Oracle que permite processar dados armazenados no banco de dados Exemplos de operações permitidas alterar, remover,

Leia mais

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 11-1. INTRODUÇÃO TRIGGERS (GATILHOS OU AUTOMATISMOS) Desenvolver uma aplicação para gerenciar os dados significa criar uma aplicação que faça o controle sobre todo ambiente desde a interface, passando

Leia mais

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL Linguagem de Definição de Dados SQL Structured Query Language Uma das mais importantes linguagens relacionais (se não a mais importante) Exemplos de SGBD que utilizam SQL Oracle Informix Ingress SQL

Leia mais

2008.1. A linguagem SQL

2008.1. A linguagem SQL SQL 2008.1 A linguagem SQL SQL - Structured Query Language. Foi definida nos laboratórios de pesquisa da IBM em San Jose, California, em 1974. Teve seus fundamentos no modelo relacional Sua primeira versão

Leia mais

FAPLAN - Faculdade Anhanguera Passo Fundo Gestão da Tecnologia da Informação Banco de Dados II Prof. Eder Pazinatto Stored Procedures Procedimento armazenados dentro do banco de dados Um Stored Procedure

Leia mais

JSP - ORIENTADO A OBJETOS

JSP - ORIENTADO A OBJETOS JSP Orientação a Objetos... 2 CLASSE:... 2 MÉTODOS:... 2 Método de Retorno... 2 Método de Execução... 2 Tipos de Dados... 3 Boolean... 3 Float... 3 Integer... 4 String... 4 Array... 4 Primeira:... 4 Segunda:...

Leia mais

Projeto de Banco de Dados

Projeto de Banco de Dados Projeto de Banco de Dados Prof. Marcelo Siedler Objetivos do documento: Apresentar os conceitos de stored procedutes e funções. Exercícios. Referência: http://dev.mysql.com/doc/refman/4.1/pt/stored-procedures.html

Leia mais

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional Modelo de Dados Relacional e as Restrições de um Banco de Dados Relacional Modelo de Dados Relacional Conceitos do Modelo Relacional Representa o banco de dados como uma coleção de relações. Comparação

Leia mais

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito) 8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito) Nos itens anteriores vimos transações do tipo explícitas, ou seja, aquelas que iniciam com BEGIN TRANSACTION. As outras

Leia mais

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES

CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES CAPÍTULO 3 - TIPOS DE DADOS E IDENTIFICADORES 3.1 - IDENTIFICADORES Os objetos que usamos no nosso algoritmo são uma representação simbólica de um valor de dado. Assim, quando executamos a seguinte instrução:

Leia mais

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL Linguagem de Definição de Dados Banco de Dados SQL Structured Query Language Uma das mais importantes linguagens relacionais (se não a mais importante) Exemplos de SGBD que utilizam SQL Oracle Informix

Leia mais

1. Domínio dos Atributos

1. Domínio dos Atributos Structure Query Language SQL Guilherme Pontes lf.pontes.sites.uol.com.br 1. Domínio dos Atributos Por domínio, ou tipo, pode-se entender como a maneira como determinado atributo (ou campo, se tratando

Leia mais

Introdução à Linguagem

Introdução à Linguagem Introdução à Linguagem Curso de Nivelamento do PPGMNE Janeiro / 2011 Juliano J. Scremin jjscremin@jjscremin.t5.com.br Um pouco de história Um pouco de história: Nascimento do Python Um pouco de história:

Leia mais

2008.1 SQL. Autor: Renata Viegas

2008.1 SQL. Autor: Renata Viegas SQL Autor: Renata Viegas A linguagem SQL SQL - Structured Query Language. Foi definida nos laboratórios de pesquisa da IBM em San Jose, California, em 1974. Teve seus fundamentos no modelo relacional Sua

Leia mais

Persistência de Dados

Persistência de Dados Persistência de s Universidade do Estado de Santa Catarina - Udesc Centro de Ciências Tecnológicas - CCT Departamento de Ciência da Computação Tecnologia de Sistemas de Informação Estrutura de s II - DAD

Leia mais

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

FUNCTION ) RETURNS INTEGER AS $$ DECLARE PERFORM O comando PERFORM permite a execução de um comando SELECT desprezando o resultado do comando. PERFORM query; A variável especial FOUND é definida como verdadeiro se a instrução produzir pelo menos

Leia mais

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011 Banco de Dados I Aula 12 - Prof. Bruno Moreno 04/10/2011 Plano de Aula SQL Definição Histórico SQL e sublinguagens Definição de dados (DDL) CREATE Restrições básicas em SQL ALTER DROP 08:20 Definição de

Leia mais

Usando PostgreSQL na Regra de Negócio de um ERP. Fabiano Machado Dias Eduardo Wolak

Usando PostgreSQL na Regra de Negócio de um ERP. Fabiano Machado Dias Eduardo Wolak Usando PostgreSQL na Regra de Negócio de um ERP Fabiano Machado Dias Eduardo Wolak Regra de negócio? São todas as regras existentes num sistema de informação, que ditam seu comportamento, suas restrições

Leia mais

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger A tecnologia de banco de dados permite persistir dados de forma a compartilha-los com varias aplicações. Aplicação 1 aplicação 2 aplicação 3 SGDB Banco

Leia mais

Oracle 10g: SQL e PL/SQL

Oracle 10g: SQL e PL/SQL Oracle 10g: SQL e PL/SQL PL/SQL: Visão Geral Enzo Seraphim Visão Geral Vantagens de PL/SQL Suporte total à linguagem SQL Total integração com o Oracle Performance Redução da comunicação entre a aplicação

Leia mais

MC102 Algoritmos e programação de computadores Aula 3: Variáveis

MC102 Algoritmos e programação de computadores Aula 3: Variáveis MC102 Algoritmos e programação de computadores Aula 3: Variáveis Variáveis Variáveis são locais onde armazenamos valores na memória. Toda variável é caracterizada por um nome, que a identifica em um programa,

Leia mais

SQL Procedural. Josino Rodrigues Neto josinon@gmail.com

SQL Procedural. Josino Rodrigues Neto josinon@gmail.com SQL Procedural Josino Rodrigues Neto josinon@gmail.com SQL Procedural Agregada em SQL-92 As ferramentas têm nomes para suas linguagens SQL procedurais/embutidas Oracle : PL/SQL Postgres PL/Pgsql SQL Server

Leia mais

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10

2. OPERADORES... 6 3. ALGORITMOS, FLUXOGRAMAS E PROGRAMAS... 8 4. FUNÇÕES... 10 1. TIPOS DE DADOS... 3 1.1 DEFINIÇÃO DE DADOS... 3 1.2 - DEFINIÇÃO DE VARIÁVEIS... 3 1.3 - VARIÁVEIS EM C... 3 1.3.1. NOME DAS VARIÁVEIS... 3 1.3.2 - TIPOS BÁSICOS... 3 1.3.3 DECLARAÇÃO DE VARIÁVEIS...

Leia mais

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

PROCEDIMENTOS ARMAZENADOS (Stored Procedures) PROCEDIMENTOS ARMAZENADOS (Stored Procedures) 1. Introdução Stored Procedure é um conjunto de comandos, ao qual é atribuído um nome. Este conjunto fica armazenado no Banco de Dados e pode ser chamado a

Leia mais

Algoritmos e Programação _ Departamento de Informática

Algoritmos e Programação _ Departamento de Informática 16 ARQUIVOS Um arquivo corresponde a um conjunto de informações (exemplo: uma estrutura de dados-registro), que pode ser armazenado em um dispositivo de memória permanente, exemplo disco rígido. As operações

Leia mais

Programação SQL. Introdução

Programação SQL. Introdução Introdução Principais estruturas duma Base de Dados: Uma BD relacional é constituída por diversas estruturas (ou objectos ) de informação. Podemos destacar: Database: designa a própria BD; Table/Tabela:

Leia mais

Introdução à Programação

Introdução à Programação Introdução à Programação Introdução a Linguagem C Construções Básicas Programa em C #include int main ( ) { Palavras Reservadas } float celsius ; float farenheit ; celsius = 30; farenheit = 9.0/5

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 07: Funções O comando return Protótipo de funções O tipo void Arquivos-cabeçalho Escopo de variáveis Passagem de parâmetros por valor

Leia mais

MYSQL: TIPOS DE DADOS. Gilvan Vieira Moura E-mail: gilvansistema@hotmail.com

MYSQL: TIPOS DE DADOS. Gilvan Vieira Moura E-mail: gilvansistema@hotmail.com MYSQL: TIPOS DE DADOS Gilvan Vieira Moura E-mail: gilvansistema@hotmail.com TIPOS DE DADOS Bancos de dados, como falamos anteriormente, armazenam dados dentro de tabelas, na forma de linhas e colunas.

Leia mais

DESENVOLVIMENTO DE SOFTWARE

DESENVOLVIMENTO DE SOFTWARE VARIAÁ VEL Antes de iniciarmos os comandos referentes a Banco de Dados, precisamos de uma breve descrição técnica sobre Variáveis que serão uma constante em programação seja qual for sua forma de leitura.

Leia mais

Componentes da linguagem C++

Componentes da linguagem C++ Componentes da linguagem C++ C++ é uma linguagem de programação orientada a objetos (OO) que oferece suporte às características OO, além de permitir você realizar outras tarefas, similarmente a outras

Leia mais

PHP INTEGRAÇÃO COM MYSQL PARTE 1

PHP INTEGRAÇÃO COM MYSQL PARTE 1 INTRODUÇÃO PHP INTEGRAÇÃO COM MYSQL PARTE 1 Leonardo Pereira leonardo@estudandoti.com.br Facebook: leongamerti http://www.estudandoti.com.br Informações que precisam ser manipuladas com mais segurança

Leia mais

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período

PROGRAMAÇÃO ESTRUTURADA. CC 2º Período PROGRAMAÇÃO ESTRUTURADA CC 2º Período PROGRAMAÇÃO ESTRUTURADA Aula 06: Ponteiros Declarando e utilizando ponteiros Ponteiros e vetores Inicializando ponteiros Ponteiros para Ponteiros Cuidados a serem

Leia mais

1.6. Tratamento de Exceções

1.6. Tratamento de Exceções Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER

Leia mais

Integridade dos Dados

Integridade dos Dados 1 Integridade dos Dados Integridade dos Dados Melissa Lemos melissa@inf.puc-rio.br A integridade dos dados é feita através de restrições, que são condições obrigatórias impostas pelo modelo. Restrições

Leia mais

Disciplina: Unidade V: Prof.: E-mail: Período:

Disciplina: Unidade V: Prof.: E-mail: Período: Encontro 17 Disciplina: Sistemas de Banco de Dados Unidade V: Introdução à Linguagem SQL Prof.: Mario Filho E-mail: pro@mariofilho.com.br Período: 5º. SIG - ADM 13. Introdução à Linguagem SQL Introdução

Leia mais

Resolução de problemas e desenvolvimento de algoritmos

Resolução de problemas e desenvolvimento de algoritmos SSC0101 - ICC1 Teórica Introdução à Ciência da Computação I Resolução de problemas e desenvolvimento de algoritmos Prof. Vanderlei Bonato Prof. Cláudio Fabiano Motta Toledo Sumário Análise e solução de

Leia mais

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP)

Hardware (Nível 0) Organização. Interface de Máquina (IM) Interface Interna de Microprogramação (IIMP) Hardware (Nível 0) Organização O AS/400 isola os usuários das características do hardware através de uma arquitetura de camadas. Vários modelos da família AS/400 de computadores de médio porte estão disponíveis,

Leia mais

Persistência e Banco de Dados em Jogos Digitais

Persistência e Banco de Dados em Jogos Digitais Persistência e Banco de Dados em Jogos Digitais Prof. Marcos Francisco Pereira da Silva Especialista em Engenharia de Software Jogos Digitais - Computação Gráfica 1 Agenda Vantagens de usar a abordagem

Leia mais

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis

Aula 4 Pseudocódigo Tipos de Dados, Expressões e Variáveis 1. TIPOS DE DADOS Todo o trabalho realizado por um computador é baseado na manipulação das informações contidas em sua memória. Estas informações podem ser classificadas em dois tipos: As instruções, que

Leia mais

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior Armazenamento de Dados Prof. Antonio Almeida de Barros Junior 1 Armazenamento de Dados Todos os dados que utilizamos até o momento, ficavam armazenados apenas na memória. Ao final da execução dos programas,

Leia mais

[RÓTULO:] MNEMÔNICO [OPERANDOS] [;COMENTÁRIO]

[RÓTULO:] MNEMÔNICO [OPERANDOS] [;COMENTÁRIO] Instruções de uso do montador DAEDALUS (baseadas em texto extraído da monografia apresentada como trabalho de diplomação no curso de Bacharelado em Ciência da Computação por Luís Ricardo Schwengber, sob

Leia mais

Motivação. Aplicações precisam acessar o BD Linguagens BD X Linguagens Programação. paradigmas diferentes (impedance mismatch)

Motivação. Aplicações precisam acessar o BD Linguagens BD X Linguagens Programação. paradigmas diferentes (impedance mismatch) Sumário 1 Introdução ao Processamento de Consultas 2 Otimização de Consultas 3 Plano de Execução de Consultas 4 Introdução a Transações 5 Recuperação de Falhas 6 Controle de Concorrência 7 Fundamentos

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE

FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE Formando: Dyckson Dyorgio Dolla Orientador: Prof. Everaldo Artur Grahl Julho / 2001 ROTEIRO DA

Leia mais

Sintaxe Básica de Java Parte 1

Sintaxe Básica de Java Parte 1 Sintaxe Básica de Java Parte 1 Universidade Católica de Pernambuco Ciência da Computação Prof. Márcio Bueno poonoite@marcioubeno.com Fonte: Material da Profª Karina Oliveira Estrutura de Programa Um programa

Leia mais

Prof. Rafael Gross. rafael.gross@fatec.sp.gov.br

Prof. Rafael Gross. rafael.gross@fatec.sp.gov.br Prof. Rafael Gross rafael.gross@fatec.sp.gov.br Todo protocolo define um tipo de endereçamento para identificar o computador e a rede. O IP tem um endereço de 32 bits, este endereço traz o ID (identificador)

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

Introdução à Lógica de Programação

Introdução à Lógica de Programação Introdução à Lógica de Programação Sistemas Numéricos As informações inseridas em um computador são traduzidos em dados, ou seja, em sinais que podem ser manipulados pelo computador. O computador trabalha

Leia mais

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões

Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões Algoritmos I Aula 13 Java: Tipos básicos, variáveis, atribuições e expressões Professor: Max Pereira http://paginas.unisul.br/max.pereira Ciência da Computação Primeiro Programa em Java public class OlaPessoal

Leia mais

Organização e Arquitetura de Computadores I

Organização e Arquitetura de Computadores I Organização e Arquitetura de Computadores I Aritmética Computacional Slide 1 Sumário Unidade Lógica e Aritmética Representação de Números Inteiros Aritmética de Números Inteiros Representação de Números

Leia mais

Capítulo 2: Introdução à Linguagem C

Capítulo 2: Introdução à Linguagem C Capítulo 2: Introdução à Linguagem C INF1005 Programação 1 Pontifícia Universidade Católica Departamento de Informática Programa Programa é um algoritmo escrito em uma linguagem de programação. No nosso

Leia mais

Arquitetura de Rede de Computadores

Arquitetura de Rede de Computadores TCP/IP Roteamento Arquitetura de Rede de Prof. Pedro Neto Aracaju Sergipe - 2011 Ementa da Disciplina 4. Roteamento i. Máscara de Rede ii. Sub-Redes iii. Números Binários e Máscara de Sub-Rede iv. O Roteador

Leia mais

PL/pgSQL. Introdução. Introdução. Introdução

PL/pgSQL. Introdução. Introdução. Introdução Introdução PL/pgSQL Banco de Dados II Prof. Guilherme Tavares de Assis PL/pgSQL (Procedural Language for the PostgreSQL) é uma linguagem procedural carregável desenvolvida para o SGBD PostgreSQL, que possui

Leia mais

Linguagem PL/SQL e Triggers

Linguagem PL/SQL e Triggers TECNOLOGIA DE BASES DE DADOS Linguagem PL/SQL e Triggers António Manuel Silva Ferreira UNIVERSIDADE DE LISBOA FACULDADE DE CIÊNCIAS DEPARTAMENTO DE INFORMÁTICA asfe@di.fc.ul.pt Sumário Linguagem PL/SQL

Leia mais

PL/pgSQL por Diversão e Lucro

PL/pgSQL por Diversão e Lucro PL/pgSQL por Diversão e Lucro Roberto Mello 3a. Conferência Brasileira de PostgreSQL - PGCon-BR Campinas - 2009 1 Objetivos Apresentar as partes principais do PL/pgSQL Apresentar casos de uso comum do

Leia mais

Tutorial de Matlab Francesco Franco

Tutorial de Matlab Francesco Franco Tutorial de Matlab Francesco Franco Matlab é um pacote de software que facilita a inserção de matrizes e vetores, além de facilitar a manipulação deles. A interface segue uma linguagem que é projetada

Leia mais

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger a tecnologia de banco de dados permite persistir dados de forma a compartilha-los com varias aplicações. Aplicação 1 aplicação 2 aplicação 3 SGDB Banco

Leia mais

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira

IFPE. Disciplina: Sistemas Operacionais. Prof. Anderson Luiz Moreira IFPE Disciplina: Sistemas Operacionais Prof. Anderson Luiz Moreira SERVIÇOS OFERECIDOS PELOS SOS 1 Introdução O SO é formado por um conjunto de rotinas (procedimentos) que oferecem serviços aos usuários

Leia mais

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos TUTORIAL Display de 7 Segmentos Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

Logado no OracleXE vamos acessar a opção:

Logado no OracleXE vamos acessar a opção: Tutorial PL/SQL O PL/SQL é uma linguagem procedural que roda diretamente no núcleo do SGBD Oracle. O objetivo deste tutorial é mostrar a criação de funções e procedimentos em PL/SQL, interagindo com comandos

Leia mais

Hugo Pedro Proença, 2007

Hugo Pedro Proença, 2007 Stored Procedures À medida que a complexidade dos sistemas aumenta, torna-se cada vez mais difícil a tarefa de integrar o SQL com as aplicações cliente. Além disto, é necessário que todas as aplicações

Leia mais

Manual SAGe Versão 1.2 (a partir da versão 12.08.01)

Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Manual SAGe Versão 1.2 (a partir da versão 12.08.01) Submissão de Relatórios Científicos Sumário Introdução... 2 Elaboração do Relatório Científico... 3 Submissão do Relatório Científico... 14 Operação

Leia mais

Noções de. Microsoft SQL Server. Microsoft SQL Server

Noções de. Microsoft SQL Server. Microsoft SQL Server Noções de 1 Considerações Iniciais Basicamente existem dois tipos de usuários do SQL Server: Implementadores Administradores 2 1 Implementadores Utilizam o SQL Server para criar e alterar base de dados

Leia mais

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas PONTIFÍCIA UNIVERSIDADE CATÓLICA DE GOIÁS Curso Superior de Tecnologia em Análise e Desenvolvimento de Sistemas CMP1132 Processo e qualidade de software II Prof. Me. Elias Ferreira Sala: 402 E Quarta-Feira:

Leia mais

SQL Gatilhos (Triggers)

SQL Gatilhos (Triggers) SQL Gatilhos (Triggers) Laboratório de Bases de Dados Gatilho (trigger) Bloco PL/SQL que é disparado de forma automática e implícita sempre que ocorrer um evento associado a uma tabela INSERT UPDATE DELETE

Leia mais

AULA 02. 1. Uma linguagem de programação orientada a objetos

AULA 02. 1. Uma linguagem de programação orientada a objetos AULA 02 TECNOLOGIA JAVA O nome "Java" é usado para referir-se a 1. Uma linguagem de programação orientada a objetos 2. Uma coleção de APIs (classes, componentes, frameworks) para o desenvolvimento de aplicações

Leia mais

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery

Linguagem de Programação JAVA. Técnico em Informática Professora Michelle Nery Linguagem de Programação JAVA Técnico em Informática Professora Michelle Nery Agenda Regras paravariáveis Identificadores Válidos Convenção de Nomenclatura Palavras-chaves em Java Tipos de Variáveis em

Leia mais

UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ CIÊNCIA DA COMPUTAÇÃO CURSORS. Profº Erinaldo Sanches Nascimento

UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ CIÊNCIA DA COMPUTAÇÃO CURSORS. Profº Erinaldo Sanches Nascimento UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ CIÊNCIA DA COMPUTAÇÃO CURSORS Profº Erinaldo Sanches Nascimento Introdução Cursor é usado para percorrer um conjunto de linhas retornadas por uma consulta

Leia mais

Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br Programação com acesso a BD Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br 1 Modelos de Dados, Esquemas e Instâncias 2 Modelos de Dados, Esquemas e Instâncias Modelo de dados: Conjunto de conceitos

Leia mais

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br

LP II Estrutura de Dados. Introdução e Linguagem C. Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br LP II Estrutura de Dados Introdução e Linguagem C Prof. José Honorato F. Nunes honorato.nunes@ifbaiano.bonfim.edu.br Resumo da aula Considerações Gerais Introdução a Linguagem C Variáveis e C Tipos de

Leia mais

CIÊNCIA E TECNOLOGIA DO RIO

CIÊNCIA E TECNOLOGIA DO RIO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE BANCO DE DADOS II Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@ifrn.edu.br Curso de Tecnologia

Leia mais

Algoritmos com VisuAlg

Algoritmos com VisuAlg Algoritmos com VisuAlg Prof Gerson Volney Lagemann Depto Eng de Produção e Sistemas UDESC - CCT Algoritmos com VisuAlg Introdução A linguagem VisuAlg é simples, seu objetivo é disponibilizar um ambiente

Leia mais

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada

Programação Estruturada. Programação Estruturada. Idéias Básicas da Programação Estruturada Programação Estruturada Programação Estruturada Paradigmas de Linguagens de Programação As linguagens desse paradigma são muitas vezes chamadas de linguagens convencionais, procedurais ou imperativas.

Leia mais

Crash recovery é similar ao instance recovery, onde o primeiro referencia ambientes de instância exclusiva e o segundo ambientes parallel server.

Crash recovery é similar ao instance recovery, onde o primeiro referencia ambientes de instância exclusiva e o segundo ambientes parallel server. Recover no Oracle O backup e recuperação de dados em um SGBD é de grande importância para a manutenção dos dados. Dando continuidade a nossos artigos, apresentamos abaixo formas diferentes de se fazer

Leia mais

Treinamento sobre SQL

Treinamento sobre SQL Treinamento sobre SQL Como Usar o SQL Os dois programas que você mais utilizara no SQL Server são: Enterprise Manager e Query Analyzer. No Enterprise Manager, você pode visualizar e fazer alterações na

Leia mais

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante

Cálculo Numérico Aula 1: Computação numérica. Tipos de Erros. Aritmética de ponto flutuante Cálculo Numérico Aula : Computação numérica. Tipos de Erros. Aritmética de ponto flutuante Computação Numérica - O que é Cálculo Numérico? Cálculo numérico é uma metodologia para resolver problemas matemáticos

Leia mais

Manipulando Strings no VBA (Replace, Mid e InStr)

Manipulando Strings no VBA (Replace, Mid e InStr) Manipulando Strings no VBA (Replace, Mid e InStr) por Eduardo Vieira Machado (Good Guy) Hoje gostaria de tratar de um assunto bastante atraente no Access e que é muito trabalhado nas empresas - a manipulação

Leia mais

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1.

Universidade Federal de Santa Maria Curso de Arquivologia. Disciplina de Banco de Dados Aplicados à Arquivística. Versao 1. Universidade Federal de Santa Maria Curso de Arquivologia Disciplina de Banco de Dados Aplicados à Arquivística Prof. Andre Zanki Cordenonsi Versao 1.0 Março de 2008 Tópicos Abordados Conceitos sobre Banco

Leia mais

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL. Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2012 Edição 7 Listando e Gravando Listando itens em ComboBox e gravando os dados no

Leia mais

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos TUTORIAL Memória Flash Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

Comandos DDL. id_modulo = id_m odulo

Comandos DDL. id_modulo = id_m odulo Comandos DDL Estudo de Caso Controle Acadêmico Simplificado Uma escola contém vários cursos, onde cada aluno possui uma matricula num determinado curso. Estes cursos, por sua vez, possuem módulos, aos

Leia mais

Consultoria e Treinamento em Bancos de Dados Relacionais

Consultoria e Treinamento em Bancos de Dados Relacionais Tabela de conteúdos CREATE TABLE AS...1 CREATE DOMAIN...1 Funções de dados...2 Funções de data e hora...2 Funções de agregação...3 Expressões condicionais...4 CASE...4 COALESCE...4 NULLIF...4 Controle

Leia mais

INF 1005 Programação I

INF 1005 Programação I INF 1005 Programação I Aula 03 Introdução a Linguagem C Edirlei Soares de Lima Estrutura de um Programa C Inclusão de bibliotecas auxiliares: #include Definição de constantes:

Leia mais

Instituto Educacional de Castro Tecnologia em Sistemas para Internet

Instituto Educacional de Castro Tecnologia em Sistemas para Internet Instituto Educacional de Castro Tecnologia em Sistemas para Internet Profº. Luciano R. Rocha INSTALAÇÃO E MANUTENÇÃO DE BANCO DE DADOS TIPOS DE DADO Nome Aliases Descrição bigint int8 inteiro de oito bytes

Leia mais

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00

VIII. VARIÁVEIS. Tabela I ARQUITETURA DA MEMÓRIA. 0x0000 0x34 0x0001 0xB0 0x0002 0x23. 0xFFFF 0x00 Fundamentos da Programação 32 A. Conceito Variáveis contém dados: VIII. VARIÁVEIS de entrada que o computador precisa manipular; de saída que o computador precisa imprimir; e temporários, utilizados de

Leia mais

Prof. Marcelo Machado Cunha www.marcelomachado.com mcelobr@yahoo.com.br

Prof. Marcelo Machado Cunha www.marcelomachado.com mcelobr@yahoo.com.br Prof. Marcelo Machado Cunha www.marcelomachado.com mcelobr@yahoo.com.br Ementa Introdução a Banco de Dados (Conceito, propriedades), Arquivos de dados x Bancos de dados, Profissionais de Banco de dados,

Leia mais

Android e Bancos de Dados

Android e Bancos de Dados (Usando o SQLite) Programação de Dispositivos Móveis Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do

Leia mais

Procedimentos armazenados

Procedimentos armazenados Procedimentos armazenados Prof. Márcio Bueno {bd2tarde,bd2noited}@marciobueno.com Material da Profª Maria Lígia B. Perkusich Procedimentos armazenados (i) Definição Um procedimento armazenado (stored procedure)

Leia mais

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária

Curso: Técnico de Informática Disciplina: Redes de Computadores. 1- Apresentação Binária 1- Apresentação Binária Os computadores funcionam e armazenam dados mediante a utilização de chaves eletrônicas que são LIGADAS ou DESLIGADAS. Os computadores só entendem e utilizam dados existentes neste

Leia mais

Prof. Carlos Majer Aplicações Corporativas UNICID

Prof. Carlos Majer Aplicações Corporativas UNICID Este material pertence a Carlos A. Majer, Professor da Unidade Curricular: Aplicações Corporativas da Universidade Cidade de São Paulo UNICID Licença de Uso Este trabalho está licenciado sob uma Licença

Leia mais

Tarefa Orientada 19 Triggers

Tarefa Orientada 19 Triggers Tarefa Orientada 19 Triggers Objectivos: Criar triggers AFTER Criar triggers INSTEAD OF Exemplos de utilização Os triggers são um tipo especial de procedimento que são invocados, ou activados, de forma

Leia mais

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo.

ARRAYS. Um array é um OBJETO que referencia (aponta) mais de um objeto ou armazena mais de um dado primitivo. Cursos: Análise, Ciência da Computação e Sistemas de Informação Programação I - Prof. Aníbal Notas de aula 8 ARRAYS Introdução Até agora, utilizamos variáveis individuais. Significa que uma variável objeto

Leia mais

Linguagem SQL (Parte I)

Linguagem SQL (Parte I) Universidade Federal de Sergipe Departamento de Sistemas de Informação Itatech Group Jr Softwares Itabaiana Site: www.itatechjr.com.br E-mail: contato@itatechjr.com.br Linguagem SQL (Parte I) Introdução

Leia mais