Pode parecer meio estranho e é! Pois não sei se isto é viavel e possível. Mas gostaria de saber se tem como dentro de um select validar o conteúdo de um conjunto, exemplo:
Se em determinado script eu colocar uma condição que me traga os registros que pertencerem a um conjunto ou contenha determinada cadeia de caracteres (IN ou LIKE) e querer saber se isto é falso ou verdadeiro ou seja se me trouxer registro ou não?
Gostaria de aproveitar o tópico também para sanar uma dúvida "básica", em determinado SELECT seu eu quiser saber a quantidade de registros e ainda saber quais registros são repetidos é possível?
Att.
Validação do conteudo de um conjunto de um select
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:

SELECT table_name, COUNT(*)
FROM all_indexes
GROUP BY table_name
HAVING COUNT(*) = 2;
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Você pode usar case expression para atribuir os valores que você quer de acordo com uma avaliação booleana de predicado. Por exemplo:
SQL> create table emp as
2 select 'KOBE BEAN BRYANT' emp_name from dual union all
3 select 'LEBRON JAMES' emp_name from dual union all
4 select 'STEVE NASH' emp_name from dual union all
5 select 'BARON DAVIS' emp_name from dual union all
6 select 'JEROME JAMES' emp_name from dual union all
7 select 'TIM DUNCAN' emp_name from dual union all
8 select 'MARK BRYANT' emp_name from dual union all
9 select 'KEVIN DURANT' emp_name from dual;
Table created
SQL>
SQL> select e.*,
2 case when e.emp_name like '%BRYANT' then 1
3 else 0 end acha_bryant
4 from emp e
5 /
EMP_NAME ACHA_BRYANT
---------------- -----------
KOBE BEAN BRYANT 1
LEBRON JAMES 0
STEVE NASH 0
BARON DAVIS 0
JEROME JAMES 0
TIM DUNCAN 0
MARK BRYANT 1
KEVIN DURANT 0
8 rows selected
SQL>
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:

assim não pode?
select
length('1234567') as "tamanho",
lpad('1234567', length('1234567'), ' ')
from dual
-
- Rank: DBA Sênior
- Mensagens: 325
- Registrado em: Seg, 16 Nov 2009 4:50 pm
- Localização: São Paulo - SP
Serve, serve sim, você me deu uma ideia!
Mas além disso, a seguinte situação pode gerar um erro de incompatiblidade de tipos?
Quando o que eu acho que seria certo:
Supondo que Matricula seja VARCHAR2?
Mas além disso, a seguinte situação pode gerar um erro de incompatiblidade de tipos?
LPAD( vTST_CURSOR2.MATRICULA, 6, 0) ||
LPAD( vTST_CURSOR2.MATRICULA, 6, '0') ||
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Realmente o estritamente correto é como você falou ali com o '0'. Se você usar 0 o Oracle converte implicitamente por você.
-
- Rank: DBA Sênior
- Mensagens: 325
- Registrado em: Seg, 16 Nov 2009 4:50 pm
- Localização: São Paulo - SP
Bem, coincidência ou não após eu ter alterado
O seguinte erro parou de ocorrer:
O que acontecia era que, ao gerar este erro a execução da proc era interrompida e o arquivo texto era gerado incompleto.
Gostaria de saber se tem como identificar precisamente em qual linha que está ocorrendo o erro?
Att.
De: LPAD( vTST_CURSOR2.MATRICULA, 6, 0) ||
Para: LPAD( vTST_CURSOR2.MATRICULA, 6, '0') ||
ORA-06502: PL/SQL: numeric or value error: character to number conversion error -6502
Gostaria de saber se tem como identificar precisamente em qual linha que está ocorrendo o erro?
Att.
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Bom, coincidência ou não, o erro não era no LPAD pois o que o Oracle faz implicitamente para você é o seguinte:
São equivalentes, se um der erro o outro vai dar também.
E a mensagem está dizendo que o erro era de PL/SQL e não SQL, na conversão de caractere para número em vez de número para caractere.
Poderia ser por conta daquele concatenamento que há na direita do LPAD, por exemplo:
SQL> SELECT lpad(1, 6, 0) col1 FROM dual;
COL1
------
000001
SQL> SELECT lpad(to_char(1), 6, to_char(0)) col1 FROM dual;
COL1
------
000001
E a mensagem está dizendo que o erro era de PL/SQL e não SQL, na conversão de caractere para número em vez de número para caractere.
Poderia ser por conta daquele concatenamento que há na direita do LPAD, por exemplo:
SQL> DECLARE
2 v_char VARCHAR2(100);
3 v_num NUMBER;
4 BEGIN
5 v_char := to_number(lpad(to_char(1), 6, to_char(0)) || '-1');
6 v_num := to_number(v_char);
7 END;
8 /
DECLARE
v_char VARCHAR2(100);
v_num NUMBER;
BEGIN
v_char := to_number(lpad(to_char(1), 6, to_char(0)) || '-1');
v_num := to_number(v_char);
END;
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 6
SQL>
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Sim, será sempre uma string, e nem sempre será possível convertê-la para um número, principalmente se houver concatenamentos com outros elementos de varchar.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Google [Bot] e 1 visitante