select
‘Empresa_’|| ‘VAR’||’_’|| to_char(sysdate, ‘yyyy’)||to_char(sysdate, ‘mm’)||to_char(sysdate, ‘dd’)
||to_char(sysdate, ‘HH24’)||to_char(sysdate, ‘MI’)||to_char(sysdate, ‘SS’)
||’.txt’
from dual
PL/SQL – Retirar quebra de linha de uma string
REPLACE(TRIM(variavel),CHR(10),' ');
Oracle PL/SQL MAX Function
Exemplo prático;
Criando a tabela de funcionário.
<pre lang="sql" escaped="true">
create table FUNCIONARIO
(
NM_FUNCIONARIO VARCHAR2(150),
NR_CHAPA NUMBER,
DT_CONTRATACAO DATE
)
</pre>
Exemplo de uso da função max para obter o maior número de chapa.
Tabela onde está os valores salários e competências
<pre lang=’sql’ line=’1′>
create table BENTO.FUNC_SALARIO
(
DT_COMPETENCIA DATE,
DT_INICIO_VIGENCIA DATE,
DT_FIM_VIGENCIA DATE,
NR_CHAPA NUMBER,
VL_SALARIO NUMBER(15,2)
)
</pre>
Imaginando uma situação onde é necessário demonstrar o salário em vigência atual.
<pre lang=’sql’ line=’1′>
select
a.NM_FUNCIONARIO
, a.nr_chapa
, b.VL_SALARIO
from
bento.funcionario a
, bento.func_salario b
where a.nr_chapa = b.NR_CHAPA
and b.dt_competencia = ( select max(c.DT_COMPETENCIA)
from bento.func_salario c
where c.NR_CHAPA = b.nr_chapa
)
</pre>
Situação onde é necessário demonstrar o valor de salário atual e o salário anterior.
Hoje me deparei com o erro; ORA-01476 divisor is equal to zero, em um relatório, onde existia o cálculo de divisão.
O problema: Divisão por 0 (zero)
0/0
Solução:
CASE
select
case WHEN 0 (var) = 0 then 0
else
50 / 1
end soma
from dual
Resultado: 0
select
case WHEN 1 (var) = 0 then 0
else
50 / 2
end soma
from dual
Resultado: 25
Fonte: http://dba-oracle.com/t_ora_01476_divisor_equa_to_zero.htm
http://stackoverflow.com/questions/15798910/oracle-divisor-is-equal-to-zero
(2014/10)
Olá hoje vou demonstrar como utilizar o gerador de dados do PL/SQL, uma funcionalidade bastante útil quando se precisa popular uma tabela para testes.
Criando a tabela
— Create table
create table TB_PESSOA_FISICA
(
nr_sequencia NUMBER,
nm_pessoa VARCHAR2(200),
dt_nascimento DATE,
sexo CHAR(1),
ds_rg VARCHAR2(40),
nr_cpf NUMBER(11),
ds_passaporte VARCHAR2(100),
nr_celular NUMBER,
ds_email VARCHAR2(100),
ds_site VARCHAR2(100)
)
tablespace DEV_DATA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 5M
next 5M
minextents 1
maxextents unlimited
pctincrease 0
);
— Add comments to the columns
comment on column TB_PESSOA_FISICA.sexo
is ”’M”,”F”’;
Após abrir o PL/SQL Developer abrir a funcionalidade no menu ferramentas -> Data generator
A geração pode ser feita de 3 formas, sendo para teste visual, popular diretamente a tabela ou gerar um arquivo .sql, conforme exemplo abaixo.
Resultado em arquivo .sql
insert into DEV.TB_PESSOA_FISICA (NR_SEQUENCIA, NM_PESSOA, SEXO, DS_RG, DS_PASSAPORTE, NR_CELULAR, DS_EMAIL, DS_SITE)
values (676682, ‘Katie Basinger’, ‘?’, ‘702874840’, ‘BR-063921453’, 887188870, ‘biazrvr@zqhwdvj.com’, ‘www.uweovptrlr.com’);
insert into DEV.TB_PESSOA_FISICA (NR_SEQUENCIA, NM_PESSOA, SEXO, DS_RG, DS_PASSAPORTE, NR_CELULAR, DS_EMAIL, DS_SITE)
values (275765, ‘Matthew Emmerich’, ‘?’, ‘437142418’, ‘BR-259837828’, 068887587, ‘yriogou@ouspdgb.com’, ‘www.lmcjkxhgrq.com’);
insert into DEV.TB_PESSOA_FISICA (NR_SEQUENCIA, NM_PESSOA, SEXO, DS_RG, DS_PASSAPORTE, NR_CELULAR, DS_EMAIL, DS_SITE)
values (444395, ‘Leelee Lewis’, ‘?’, ‘712642762’, ‘BR-297344731’, 844415207, ‘dkbggnc@rfnwnyp.com’, ‘www.blngqslczo.com’);
insert into DEV.TB_PESSOA_FISICA (NR_SEQUENCIA, NM_PESSOA, SEXO, DS_RG, DS_PASSAPORTE, NR_CELULAR, DS_EMAIL, DS_SITE)
values (337775, ‘Sonny Bright’, ‘?’, ‘046284636’, ‘BR-389647948’, 551661358, ‘wuutgkw@tnoaivb.com’, ‘www.asztavilcd.com’);
insert into DEV.TB_PESSOA_FISICA (NR_SEQUENCIA, NM_PESSOA, SEXO, DS_RG, DS_PASSAPORTE, NR_CELULAR, DS_EMAIL, DS_SITE)
values (493276, ‘Gaby Tomlin’, ‘?’, ‘386886248’, ‘BR-599360178’, 076930526, ‘mdrgkbt@izlmwsz.com’, ‘www.blesssyuot.com’);
insert into DEV.TB_PESSOA_FISICA (NR_SEQUENCIA, NM_PESSOA, SEXO, DS_RG, DS_PASSAPORTE, NR_CELULAR, DS_EMAIL, DS_SITE)
values (586205, ‘Lila Furtado’, ‘?’, ‘665230936’, ‘BR-655403956’, 247439149, ‘ixmpmuz@pkuyfsc.com’, ‘www.rjfjnkgwuz.com’);
SELECT
NM_PESSOA, DT_NASCIMENTO, DS_EMAIL
FROM
PESSOA_FISICA_TB P
WHERE P.SEXO = ‘M’
AND (
(case when 2 = :PARAMETRO then P.TIPO end) in (1)
or
(case when 2 = :PARAMETRO then P.TIPO end) <> (1)
)
AND ((case when ‘S’ = :P_FERR then
1 end) = 1
or
(case when ‘N’ = :P_FERR then CE.NUM_CONTRATO end) <> (123)
)
Fazendo o select para o usuário do banco: fabiano
1 | SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE LIKE 'FABIANO' |
Será retornado os privilégios e permissões para as ações, veja a seguir.
Create Table/Criar tabela = Não
Unlimited tablespace = Não
Create Trigger = Não
Create View = Não
Create Materialized View = Não
Create Synonym = Não
Ou Seja o usuário ainda não possui as permissões atribuídas.
Na coluna GRANTEE é o usuário com a permissão concedida, e o PRIVILEGE o privilégio que o usuário tem no acesso ao objeto identificado.
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTEE LIKE ‘FABIANO’
SELECT GRANTEE, GRANTED_ROLE, ADMIN_OPTION, DEFAULT_ROLE FROM DBA_ROLE_PRIVS WHERE GRANTEE LIKE ‘FABIANO’
MINUS
Ele verifica a combinação dos resultados com o operador MINUS e retorna somente as linhas únicas referente e primeira consulta.
— Create table
create table FABIANO_A
(
cd_pessoa_fisica NUMBER not null,
nm_pessoa VARCHAR2(200) not null,
dt_nascimento DATE,
nr_cpf NUMBER(15),
nr_rg VARCHAR2(15),
st_sexo VARCHAR2(1)
)
tablespace FABIANO_DATA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
— Create table
create table FABIANO_B
(
cd_pessoa_fisica NUMBER not null,
nm_pessoa VARCHAR2(200) not null,
dt_nascimento DATE,
nr_cpf
O comando TRUNCATE é responsável por limpar os registros de uma tabela e fará isto de uma forma mais rápido que o comando DELETE.
Para usar o comando é necessário ter permissão.
SELECT count(*) FROM tabela_A;
4639
TRUNCATE TABLE tabela_A;
SELECT count(*) FROM tabela_A;
0
Oracle/PLSQL: Função TO_CHAR
Sintaxe da função;
TO_CHAR( value, [ format_mask ], [ nls_language ] )
exemplo com datas
TO_CHAR(sysdate, ‘yyyy/mm/dd’); retorno ‘2003/07/09’
TO_CHAR(sysdate, ‘Month DD, YYYY’); retorno ‘July 09, 2003’
TO_CHAR(sysdate, ‘FMMonth DD, YYYY’); retorno ‘July 9, 2003’
TO_CHAR(sysdate, ‘MON DDth, YYYY’); retorno ‘JUL 09TH, 2003’
TO_CHAR(sysdate, ‘FMMON DDth, YYYY’); retorno ‘JUL 9TH, 2003’
TO_CHAR(sysdate, ‘FMMon ddth, YYYY’); retorno ‘Jul 9th, 2003’
http://www.techonthenet.com/oracle/functions/to_char.php