PL / SQL - Tipos de dados
Neste capítulo, discutiremos os tipos de dados em PL / SQL. As variáveis, constantes e parâmetros PL / SQL devem ter um tipo de dados válido, que especifica um formato de armazenamento, restrições e um intervalo válido de valores. Vamos nos concentrar noSCALAR e a LOBtipos de dados neste capítulo. Os outros dois tipos de dados serão abordados em outros capítulos.
| S.No | Categoria e descrição |
|---|---|
| 1 | Scalar Valores únicos sem componentes internos, como um NUMBER, DATE, ou BOOLEAN. |
| 2 | Large Object (LOB) Ponteiros para objetos grandes que são armazenados separadamente de outros itens de dados, como texto, imagens gráficas, videoclipes e formas de onda sonoras. |
| 3 | Composite Itens de dados que possuem componentes internos que podem ser acessados individualmente. Por exemplo, coleções e registros. |
| 4 | Reference Ponteiros para outros itens de dados. |
Tipos e subtipos de dados escalares PL / SQL
Tipos e subtipos de dados escalares PL / SQL vêm nas seguintes categorias -
| S.No | Tipo de data e descrição |
|---|---|
| 1 | Numeric Valores numéricos nos quais as operações aritméticas são realizadas. |
| 2 | Character Valores alfanuméricos que representam caracteres únicos ou sequências de caracteres. |
| 3 | Boolean Valores lógicos nos quais as operações lógicas são executadas. |
| 4 | Datetime Datas e horários. |
PL / SQL fornece subtipos de tipos de dados. Por exemplo, o tipo de dados NUMBER tem um subtipo chamado INTEGER. Você pode usar os subtipos em seu programa PL / SQL para tornar os tipos de dados compatíveis com os tipos de dados em outros programas, enquanto incorpora o código PL / SQL em outro programa, como um programa Java.
Tipos e subtipos de dados numéricos PL / SQL
A tabela a seguir lista os tipos de dados numéricos predefinidos PL / SQL e seus subtipos -
| S.No | Tipo de dados e descrição |
|---|---|
| 1 | PLS_INTEGER Inteiro assinado no intervalo -2.147.483.648 a 2.147.483.647, representado em 32 bits |
| 2 | BINARY_INTEGER Inteiro assinado no intervalo -2.147.483.648 a 2.147.483.647, representado em 32 bits |
| 3 | BINARY_FLOAT Número de ponto flutuante de formato IEEE 754 de precisão única |
| 4 | BINARY_DOUBLE Número de ponto flutuante de formato IEEE 754 de precisão dupla |
| 5 | NUMBER(prec, scale) Número de ponto fixo ou ponto flutuante com valor absoluto no intervalo 1E-130 a (mas não incluindo) 1.0E126. Uma variável NUMBER também pode representar 0 |
| 6 | DEC(prec, scale) Tipo de ponto fixo específico de ANSI com precisão máxima de 38 dígitos decimais |
| 7 | DECIMAL(prec, scale) Tipo de ponto fixo específico da IBM com precisão máxima de 38 dígitos decimais |
| 8 | NUMERIC(pre, secale) Tipo flutuante com precisão máxima de 38 dígitos decimais |
| 9 | DOUBLE PRECISION Tipo de ponto flutuante específico de ANSI com precisão máxima de 126 dígitos binários (aproximadamente 38 dígitos decimais) |
| 10 | FLOAT ANSI e tipo de ponto flutuante específico da IBM com precisão máxima de 126 dígitos binários (aproximadamente 38 dígitos decimais) |
| 11 | INT Tipo inteiro específico de ANSI com precisão máxima de 38 dígitos decimais |
| 12 | INTEGER ANSI e tipo de número inteiro específico da IBM com precisão máxima de 38 dígitos decimais |
| 13 | SMALLINT ANSI e tipo de número inteiro específico da IBM com precisão máxima de 38 dígitos decimais |
| 14 | REAL Tipo de ponto flutuante com precisão máxima de 63 dígitos binários (aproximadamente 18 dígitos decimais) |
A seguir está uma declaração válida -
DECLARE
num1 INTEGER;
num2 REAL;
num3 DOUBLE PRECISION;
BEGIN
null;
END;
/
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
PL/SQL procedure successfully completed
Tipos e subtipos de dados de caracteres PL / SQL
A seguir estão os detalhes dos tipos de dados de caracteres predefinidos PL / SQL e seus subtipos -
| S.No | Tipo de dados e descrição |
|---|---|
| 1 | CHAR Sequência de caracteres de comprimento fixo com tamanho máximo de 32.767 bytes |
| 2 | VARCHAR2 Sequência de caracteres de comprimento variável com tamanho máximo de 32.767 bytes |
| 3 | RAW Binário de comprimento variável ou string de bytes com tamanho máximo de 32.767 bytes, não interpretado por PL / SQL |
| 4 | NCHAR Sequência de caracteres nacionais de comprimento fixo com tamanho máximo de 32.767 bytes |
| 5 | NVARCHAR2 Sequência de caracteres nacionais de comprimento variável com tamanho máximo de 32.767 bytes |
| 6 | LONG Sequência de caracteres de comprimento variável com tamanho máximo de 32.760 bytes |
| 7 | LONG RAW Binário de comprimento variável ou string de bytes com tamanho máximo de 32.760 bytes, não interpretado por PL / SQL |
| 8 | ROWID Identificador físico de linha, o endereço de uma linha em uma tabela comum |
| 9 | UROWID Identificador universal de linha (físico, lógico ou identificador de linha externa) |
Tipos de dados booleanos PL / SQL
o BOOLEANtipo de dados armazena valores lógicos que são usados em operações lógicas. Os valores lógicos são os valores booleanosTRUE e FALSE e o valor NULL.
No entanto, SQL não possui tipo de dados equivalente a BOOLEAN. Portanto, os valores booleanos não podem ser usados em -
- Instruções SQL
- Funções SQL integradas (como TO_CHAR)
- Funções PL / SQL chamadas de instruções SQL
PL / SQL Datetime e tipos de intervalo
o DATEdatatype é usado para armazenar datetimes de comprimento fixo, que incluem a hora do dia em segundos desde a meia-noite. As datas válidas variam de 1º de janeiro de 4712 aC a 31 de dezembro de 9999 dC.
O formato de data padrão é definido pelo parâmetro de inicialização do Oracle NLS_DATE_FORMAT. Por exemplo, o padrão pode ser 'DD-MON-YY', que inclui um número de dois dígitos para o dia do mês, uma abreviação do nome do mês e os dois últimos dígitos do ano. Por exemplo, 01-OCT-12.
Cada DATA inclui século, ano, mês, dia, hora, minuto e segundo. A tabela a seguir mostra os valores válidos para cada campo -
| Nome do Campo | Valores de data e hora válidos | Valores de intervalo válidos |
|---|---|---|
| ANO | -4712 a 9999 (excluindo ano 0) | Qualquer número inteiro diferente de zero |
| MÊS | 01 a 12 | 0 a 11 |
| DIA | 01 a 31 (limitado pelos valores de MÊS e ANO, conforme regras do calendário do local) | Qualquer número inteiro diferente de zero |
| HORA | 00 a 23 | 0 a 23 |
| MINUTO | 00 a 59 | 0 a 59 |
| SEGUNDO | 00 a 59,9 (n), onde 9 (n) é a precisão dos segundos fracionários de tempo | 0 a 59,9 (n), onde 9 (n) é a precisão do intervalo de segundos fracionários |
| TIMEZONE_HOUR | -12 a 14 (a faixa acomoda as mudanças do horário de verão) | Não aplicável |
| TIMEZONE_MINUTE | 00 a 59 | Não aplicável |
| TIMEZONE_REGION | Encontrado na visualização de desempenho dinâmico V $ TIMEZONE_NAMES | Não aplicável |
| TIMEZONE_ABBR | Encontrado na visualização de desempenho dinâmico V $ TIMEZONE_NAMES | Não aplicável |
Tipos de dados PL / SQL Large Object (LOB)
Os tipos de dados de objeto grande (LOB) referem-se a grandes itens de dados, como texto, imagens gráficas, videoclipes e formas de onda de som. Os tipos de dados LOB permitem acesso eficiente, aleatório e por partes a esses dados. A seguir estão os tipos de dados LOB PL / SQL predefinidos -
| Tipo de dados | Descrição | Tamanho |
|---|---|---|
| BFILE | Usado para armazenar grandes objetos binários em arquivos do sistema operacional fora do banco de dados. | Depende do sistema. Não pode exceder 4 gigabytes (GB). |
| BLOB | Usado para armazenar grandes objetos binários no banco de dados. | 8 a 128 terabytes (TB) |
| CLOB | Usado para armazenar grandes blocos de dados de caracteres no banco de dados. | 8 a 128 TB |
| NCLOB | Usado para armazenar grandes blocos de dados NCHAR no banco de dados. | 8 a 128 TB |
Subtipos definidos pelo usuário PL / SQL
Um subtipo é um subconjunto de outro tipo de dados, que é chamado de tipo base. Um subtipo tem as mesmas operações válidas que seu tipo base, mas apenas um subconjunto de seus valores válidos.
PL / SQL predefine vários subtipos no pacote STANDARD. Por exemplo, PL / SQL predefine os subtiposCHARACTER e INTEGER como segue -
SUBTYPE CHARACTER IS CHAR;
SUBTYPE INTEGER IS NUMBER(38,0);
Você pode definir e usar seus próprios subtipos. O programa a seguir ilustra a definição e o uso de um subtipo definido pelo usuário -
DECLARE
SUBTYPE name IS char(20);
SUBTYPE message IS varchar2(100);
salutation name;
greetings message;
BEGIN
salutation := 'Reader ';
greetings := 'Welcome to the World of PL/SQL';
dbms_output.put_line('Hello ' || salutation || greetings);
END;
/
Quando o código acima é executado no prompt SQL, ele produz o seguinte resultado -
Hello Reader Welcome to the World of PL/SQL
PL/SQL procedure successfully completed.
NULLs em PL / SQL
Os valores PL / SQL NULL representam missing ou unknown datae eles não são um número inteiro, um caractere ou qualquer outro tipo de dados específico. Observe queNULL não é o mesmo que uma string de dados vazia ou o valor de caractere nulo '\0'. Um nulo pode ser atribuído, mas não pode ser igualado a nada, incluindo ele mesmo.