[oracle_br] Re: IMP-00038: Could not convert to environment character set's handle

2015-02-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]
É *** extremamente Improvável *** que vc consiga, colega : primeiro, o datapump 
(expdp+impdp) é uma coisa, e o export/import tradicionais (exp+imp) são ** 
TOTALMENTE OUTRA COISA**, vc Rigorosamente Não Tem garantia nenhuma de formato, 
via de regra nem o impdp consegue importar arquivos gerados pelo exp, NEM o imp 
consegue importar arquivos gerados pelo expdp, são BINÁRIOS diferentes que 
podem gerar FORMATOS INTERNOS diferentes, okdoc ??? O Manual de Database 
Utilities (que cobre o datapump entre outros) já no cap. 1 - Overview of Oracle 
Data Pump diretamente afirma isso :


...
Note:
Dump files generated by the Data Pump Export utility are not compatible with 
dump files generated by the original Export utility. Therefore, files generated 
by the original Export (exp) utility cannot be imported with the Data Pump 
Import (impdp) utility. 


 Ele não explicita mas é óbvio, vale a volta : se A não é compatível com B, B 
não é compatível com A... Não rola, blz ?? O que vc teria que fazer é, usando 
um client 9i que permita (iirc é a partir de 9.2.0.7), conectar no database 11g 
e fazer o export com o exp tradicional, aí sim o banco 9i (que só possui 
exp+imp) poderia importar esses dados... 
 
 []s
 
   Chiappa

 OBS : é óbvio também além disso que para vc poder importar dados vindos de uma 
versão superior (11g no caso) para uma versão inferior (9i no caso) que :
 
  a. as configurações de NLS ** tem ** que serem se não iguais ao menos 
Similares/Equivalentes : a chance de Sucesso em se importar algo sem saber isso 
é baixa
  
  e
  
  b. os SQLs que vão ser gerados no dumpfile  NÃO PODEM USAR  
absolutamente nenhuma sintaxe/recurso/datatype que a versão inferior não conheça
  
 

[oracle_br] Query para Monitoramento de alert.log

2015-02-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Pessoal, eu estou montando (para um cliente usando RDBMS 10gR2, então sem 
chance de molezinhas como ADR agrupando por Incidente ou X$DBGALERTEXT) uma 
rotina de verificação de alert.log - para a pesquisa/leitura do alert.log 
usarei a técnica comum da external table (exemplo abaixo), que entre outras 
vantagens permite fácil acoplamento em qquer tool de Reporting, mas a 
análise/ordenação/agrupamento da informação eu pretendia fazer via query 
também, então por isso usei  abusei de Analytics ...
  Vou reportar até onde cheguei, e aonde pretendo chegar, com a intenção de 
receber os sempre bem-vindos Comentários de todos :
  
  primeiro, terei um arquivo de alert.log a ser lido , criarei uma external 
table para isso :
 
SYSTEM:@O11201:SQLhost dir C:\users\jose.chiappa\alert_exemplo.log

 Pasta de C:\users\jose.chiappa

03/02/2015  15:31 7.371 alert_exemplo.log
   1 arquivo(s)  7.371 bytes
   0 pasta(s)   267.606.016.000 bytes disponíveis

SYSTEM:@O11201:SQLcreate directory DIR_ALERT as 'C:\users\jose.chiappa';

Diretório criado.

SYSTEM:@O11201:SQLCREATE TABLE ALERT_LOG_EXT
  2  (TEXT VARCHAR2(255)
  3  ) ORGANIZATION EXTERNAL
  4  (TYPE ORACLE_LOADER
  5   DEFAULT DIRECTORY DIR_ALERT
  6   ACCESS PARAMETERS
  7   (records delimited by newline
  8nobadfile
  9nologfile
 10   )
 11   LOCATION ('alert_exemplo.log')
 12  )
 13* REJECT LIMIT UNLIMITED;

Tabela criada.

== os dados brutos :

SYSTEM:@O11201:SQLselect rownum, text from alert_log_ext;

ROWNUM TEXT
-- 
-
 1 Thu Oct 23 13:44:07 2014
 2 Starting ORACLE instance (normal)
 3 LICENSE_MAX_SESSION = 0
 4 LICENSE_SESSIONS_WARNING = 0
 5 Shared memory segment for instance monitoring created
 6 Picked latch-free SCN scheme 3
 7 Using LOG_ARCHIVE_DEST_1 parameter default value as 
USE_DB_RECOVERY_FILE_DEST
 8 Autotune of undo retention is turned on.
 9 IMODE=BR
10 ILAT =27
11 LICENSE_MAX_USERS = 0
12 SYS auditing is disabled
13 Starting up:
14 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit 
Production
15 With the Partitioning
16 Using parameter settings in client-side pfile 
C:\APP\ORACLE\ADMIN\O11201\PFILE\INIT.ORA on machine MEUPC
17 System parameters with non-default values:
18   processes= 150
19   memory_target= 3248M
20   control_files= C:\APP\ORACLE\ORADATA\O11201\CONTROL01.CTL
21   control_files= 
C:\APP\ORACLE\FLASH_RECOVERY_AREA\O11201\CONTROL02.CTL
22   db_block_size= 8192
23   compatible   = 11.2.0.0.0
24   db_recovery_file_dest= C:\app\oracle\flash_recovery_area
25   db_recovery_file_dest_size= 3912M
26   undo_tablespace  = UNDOTBS1
27   remote_login_passwordfile= EXCLUSIVE
28   db_domain= empresa.com.br
29   dispatchers  = (PROTOCOL=TCP) (SERVICE=o11201XDB)
30   local_listener   = LISTENER_O11201
31   audit_file_dest  = C:\APP\ORACLE\ADMIN\O11201\ADUMP
32   audit_trail  = DB
33   db_name  = o11201
34   open_cursors = 300
35   diagnostic_dest  = C:\APP\ORACLE
36
37 Thu Oct 23 13:44:08 2014
38 PMON started with pid=2
39
40 Mon Jan 26 10:24:46 2015
41 Thread 1 cannot allocate new log
42 Private strand flush not complete
43   Current log# 2 seq# 65 mem# 0: C:\APP\ORACLE\ORADATA\O11201\REDO02.LOG
44 Thread 1 advanced to log sequence 66 (LGWR switch)
45   Current log# 3 seq# 66 mem# 0: C:\APP\ORACLE\ORADATA\O11201\REDO03.LOG
46
47 Fri Jan 30 00:00:42 2015
48 Errors in file 
e:\oracle\product\10.2.0\admin\prod\bdump\prod_j000_12900.trc:
49 ORA-12012: error on auto execute of job 288346
50 ORA-29278: SMTP transient error: ORA-29278: SMTP transient error: 421 
Service not available
51
52 Fri Jan 30 00:10:43 2015
53 Errors in file 
e:\oracle\product\10.2.0\admin\prod\bdump\prod_j000_70292.trc:
54 ORA-12012: error on auto execute of job 288346
55 ORA-29278: SMTP transient error: ORA-29278: SMTP transient error: 421 
Service not available
56
57 Fri Jan 30 02:45:20 2015
58 The value (30) of MAXTRANS parameter ignored.
59 kupprdp: master process DM00 started with pid=82
60  to execute - SYS.KUPM$MCP.MAIN('SYS_EXPORT_FULL_31'
61 kupprdp: worker process DW01 started with worker id=1
62  to execute - SYS.KUPW$WORKER.MAIN('SYS_EXPORT_FULL_31'
63
64 Fri Jan 30 06:02:07 2015
65 The value (30) of MAXTRANS parameter ignored.
66 kupprdp: master process DM00 started with pid=53
67  to execute - SYS.KUPM$MCP.MAIN('SYS_EXPORT_FULL_31'
68 kupprdp: 

[oracle_br] Re: 1Z0-050

2015-02-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Googla por :

simulados 1Z0-050
1Z0-050 material
1Z0-050 questions
1Z0-050 tests
1Z0-050 braindump
1Z0-050 book
1Z0-050 exam guide

que vc acha uns tantos quantos 

[]s

  Chiappa
  
OBS : nem preciso dizer,  Tomar EXTREMO cuidado : o que vc acha de material 
pirata (e portanto sujeito a vírus  cositas más) não tá no gibi... caveat 
emptor...

[oracle_br] IMP-00038: Could not convert to environment character set's handle

2015-02-04 Por tôpico 'Ednilson Silva' ednilson.si...@jbs.com.br [oracle_br]
Pessoal,

Tenho um arquivo DUMP gerado pelo EXPDP do 11g, e preciso fazer um IMP num
banco 9i.

Estou recebendo o erro IMP-00038: Could not convert to environment character
set's handle

 

Verificando meu NLS_CHAR e NLS_LANG, mas não sei qual é do Banco que foi
feito o Export.

 

SQL select * 

  2  from v$nls_parameters

  3  where parameter in ('NLS_CHARACTERSET','NLS_LANGUAGE');

 

PARAMETER  VALUE

-- --

NLS_LANGUAGE   AMERICAN

NLS_CHARACTERSET   WE8ISO8859P1

 

Dá para fazer o import nessa situação, por causa do meu banco 9i?

 

Grato,

Ednilson



[oracle_br] 1Z0-050

2015-02-04 Por tôpico regisbavare...@yahoo.com.br [oracle_br]
Pessoal,
 

 Alguém tem ou sabe onde conseguir SIMULADOS para o exame 1Z0-050? Preciso 
atualizar minha certificação que ainda é do 10g.
 

 Att.
 

 Regis Bavaresco


Re: [oracle_br] Re: Sub Query

2015-02-04 Por tôpico Emerson Sanches emerson.sanc...@gmail.com [oracle_br]
Chiappa, na realidade eu NÃO quero trazer nenhuma coluna da tabela
Detalhes, eu apenas quero filtrar por uma coluna da tabela Detalhes. Se
fizer o join entre as duas tabelas, vai replicar os mesmos dados da tabela
Mestre tantas vezes quanto houver itens na tabela Detalhes. Nao tentei
fazer um Select distinct pra eliminar essa duplicação...vou
tentar isso tb...

Obrigado.

Emerson

Emerson Sanches
Analista de Sistemas

Em 3 de fevereiro de 2015 17:23, jlchia...@yahoo.com.br [oracle_br] 
oracle_br@yahoogrupos.com.br escreveu:



 Para que vc precisa de sub-query ??? Se Realmente NumNota, Serie,
 Fornecedor e TipoMovto é a PK ** e ** isso está Presente nas duas tabelas
 como Chave, por que vc não faz um JOIN entre as duas ?? Assim :

 SELECT colunasdesejadasTANTOdatabeladeNOTAquantodaITEM
   FROM Mestre m, Detalhe d
  WHERE m.NumNota= i.NumNota
AND m.Serie  = i.Serie
AND m.Fornecedor = i.Fornecedor
AND m.TipoMovto  = i.TipoMovto
AND d.Item = v_item;

 []s

   Chiappa
  



RES: [oracle_br] Re: ORA-01861: literal does not match format string

2015-02-04 Por tôpico 'Ednilson Silva' ednilson.si...@jbs.com.br [oracle_br]
Chiappa,

Muito obrigado, pela explicação.

 

Grato,

Ednilson

 

De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] 
Enviada em: quarta-feira, 4 de fevereiro de 2015 10:35
Para: oracle_br@yahoogrupos.com.br
Assunto: [oracle_br] Re: ORA-01861: literal does not match format string

 

  

Bem, a msg de erro é Extrememante clara, indicando que vc está tendo mismatch 
de NLS : o que deve estar acontecendo aí é que : como creio que vc sabe, quando 
vc cria um job, ele assume os settings de NLS da sessão (veja exemplo abaixo, 
coluna NLS_ENV na query da DBA_JOBS) , e pelo jeito vc tem na rotina chamada 
pelo job algum tipo de conversão implícita (de string para data ou número, 
provavelmente)  ** OU ** tem algum setting NLS (de linguagem, calendário, 
formato de data, whatever)...
 
 Sendo isso, aí se explica o que vc relata : quando vc conecta via algum 
programa-cliente e roda manualmente a rotina, o NLS da sessão está setado como 
o job espera, aí funciona, MAS quando vc deixa o JOB rodar/criar sozinho a 
sessão logicamente ele não conecta via programa algum, e nem abre sessão/prompt 
de comando no ambiente então ele usa os defaults NLS do database, que são 
Diferentes do esperado...
 
 Primeiro, uma demonstração de que o JOB assume o NLS da sessão, e não o do 
database :
 
 SYSTEM@O11201:SQLselect * from nls_database_parameters;

PARAMETER  VALUE
-- 
NLS_LANGUAGE   AMERICAN
NLS_TERRITORY  AMERICA
NLS_CURRENCY   $
NLS_ISO_CURRENCY   AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET   WE8MSWIN1252
NLS_CALENDAR   GREGORIAN
NLS_DATE_FORMATDD-MON-RR
NLS_DATE_LANGUAGE  AMERICAN
NLS_SORT   BINARY
NLS_TIME_FORMATHH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT   DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMATDD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY  $
NLS_COMP   BINARY
NLS_LENGTH_SEMANTICS   BYTE
NLS_NCHAR_CONV_EXCPFALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION  11.2.0.1.0

20 linhas selecionadas.

SYSTEM@O11201:SQLselect * from nls_session_parameters;

PARAMETER  VALUE
-- 
NLS_LANGUAGE   BRAZILIAN PORTUGUESE
NLS_TERRITORY  BRAZIL
NLS_CURRENCY   R$
NLS_ISO_CURRENCY   BRAZIL
NLS_NUMERIC_CHARACTERS ,.
NLS_CALENDAR   GREGORIAN
NLS_DATE_FORMATDD/MM/RR
NLS_DATE_LANGUAGE  BRAZILIAN PORTUGUESE
NLS_SORT   WEST_EUROPEAN
NLS_TIME_FORMATHH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT   DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMATDD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY  Cr$
NLS_COMP   BINARY
NLS_LENGTH_SEMANTICS   BYTE
NLS_NCHAR_CONV_EXCPFALSE

17 linhas selecionadas.

SYSTEM:@O11201:SQLed
Gravou file afiedt.buf

  1  BEGIN
  2  dbms_job.submit(
  3:jobno, 'BEGIN null; END;', sysdate, 'trunc(sysdate+5/1440,''MI'')', 
TRUE);
  4  commit;
  5* END;
SYSTEM:@O11201:SQL/

Procedimento PL/SQL concluído com sucesso.

select JOB, LOG_USER,BROKEN,INTERVAL,FAILURES,WHAT,NLS_ENV from dba_jobs where 
log_user='SYSTEM';

JOB LOG_USER BROKEN INTERVAL FAILURES WHAT   
NLS_ENV 

  
---  -- -- -- -- 
-
 
 65 SYSTEM   N  trunc(sysdate+5/1440,'MI')  0 BEGIN null; END;   
NLS_LANGUAGE='BRAZILIAN PORTUGUESE' NLS_TERRITORY='BRAZIL' NLS_CURRENCY='R$' 
NLS_ISO_CURRENCY='BRAZIL' NLS_NUMERIC_CHARACTERS=',.' 
NLS_DATE_FORMAT='dd/mm/ hh24:mi:ss' NLS_DATE_LANGUAGE='BRAZILIAN 
PORTUGUESE' NLS_SORT='WEST_EUROPEAN'   


== Até seria possível em tese se alterar o NLS do database para bater 
exatamente com o assumido pelo JOB, mas imho isso é uma porquice : a solução 
CORRETA é programação DEFENSIVA, que implica em NUNCA, JAMAIS, em TEMPO ALGUM, 
confiar nos defaults de NLS - LOCALIZE na tal rotina onde que vc faz conversão 
(INCLUSIVE implícita, via SQL!!) e/ou usa built-ins de data/hora/TZdatabase ou 
de sessão e EXPLICITAMENTE indique 

[oracle_br] Re: ORA-01861: literal does not match format string

2015-02-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Bem, a msg de erro é Extrememante clara, indicando que vc está tendo mismatch 
de NLS : o que deve estar acontecendo aí é que : como creio que vc sabe, quando 
vc cria um job, ele assume os settings de NLS da sessão (veja exemplo abaixo, 
coluna NLS_ENV na query da DBA_JOBS) , e pelo jeito vc tem na rotina chamada 
pelo job algum tipo de conversão implícita (de string para data ou número, 
provavelmente)  ** OU ** tem algum setting NLS (de linguagem, calendário, 
formato de data, whatever)...
 
 Sendo isso, aí se explica o que vc relata : quando vc conecta via algum 
programa-cliente e roda manualmente a rotina, o NLS da sessão está setado como 
o job espera, aí funciona, MAS quando vc deixa o JOB rodar/criar sozinho a 
sessão logicamente ele não conecta via programa algum, e nem abre sessão/prompt 
de comando no ambiente então ele usa os defaults NLS do database, que são 
Diferentes do esperado...
 
 Primeiro, uma demonstração de que o JOB assume o NLS da sessão, e não o do 
database :
 
 SYSTEM@O11201:SQLselect * from nls_database_parameters;

PARAMETER  VALUE
-- 
NLS_LANGUAGE   AMERICAN
NLS_TERRITORY  AMERICA
NLS_CURRENCY   $
NLS_ISO_CURRENCY   AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET   WE8MSWIN1252
NLS_CALENDAR   GREGORIAN
NLS_DATE_FORMATDD-MON-RR
NLS_DATE_LANGUAGE  AMERICAN
NLS_SORT   BINARY
NLS_TIME_FORMATHH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT   DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMATDD-MON-RR HH.MI.SSXFF AM TZR
NLS_DUAL_CURRENCY  $
NLS_COMP   BINARY
NLS_LENGTH_SEMANTICS   BYTE
NLS_NCHAR_CONV_EXCPFALSE
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION  11.2.0.1.0

20 linhas selecionadas.

SYSTEM@O11201:SQLselect * from nls_session_parameters;

PARAMETER  VALUE
-- 
NLS_LANGUAGE   BRAZILIAN PORTUGUESE
NLS_TERRITORY  BRAZIL
NLS_CURRENCY   R$
NLS_ISO_CURRENCY   BRAZIL
NLS_NUMERIC_CHARACTERS ,.
NLS_CALENDAR   GREGORIAN
NLS_DATE_FORMATDD/MM/RR
NLS_DATE_LANGUAGE  BRAZILIAN PORTUGUESE
NLS_SORT   WEST_EUROPEAN
NLS_TIME_FORMATHH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT   DD/MM/RR HH24:MI:SSXFF
NLS_TIME_TZ_FORMAT HH24:MI:SSXFF TZR
NLS_TIMESTAMP_TZ_FORMATDD/MM/RR HH24:MI:SSXFF TZR
NLS_DUAL_CURRENCY  Cr$
NLS_COMP   BINARY
NLS_LENGTH_SEMANTICS   BYTE
NLS_NCHAR_CONV_EXCPFALSE

17 linhas selecionadas.

SYSTEM:@O11201:SQLed
Gravou file afiedt.buf

  1  BEGIN
  2  dbms_job.submit(
  3:jobno, 'BEGIN null; END;', sysdate, 'trunc(sysdate+5/1440,''MI'')', 
TRUE);
  4  commit;
  5* END;
SYSTEM:@O11201:SQL/

Procedimento PL/SQL concluído com sucesso.

select JOB, LOG_USER,BROKEN,INTERVAL,FAILURES,WHAT,NLS_ENV from dba_jobs where 
log_user='SYSTEM';

JOB LOG_USER BROKEN INTERVAL FAILURES WHAT   
NLS_ENV 

  
---  -- -- -- -- 
-
 
 65 SYSTEM   N  trunc(sysdate+5/1440,'MI')  0 BEGIN null; END;   
NLS_LANGUAGE='BRAZILIAN PORTUGUESE' NLS_TERRITORY='BRAZIL' NLS_CURRENCY='R$' 
NLS_ISO_CURRENCY='BRAZIL' NLS_NUMERIC_CHARACTERS=',.' 
NLS_DATE_FORMAT='dd/mm/ hh24:mi:ss' NLS_DATE_LANGUAGE='BRAZILIAN 
PORTUGUESE' NLS_SORT='WEST_EUROPEAN'   


== Até seria possível em tese se alterar o NLS do database para bater 
exatamente com o assumido pelo JOB, mas imho isso é uma porquice : a solução 
CORRETA é programação DEFENSIVA, que implica em NUNCA, JAMAIS, em TEMPO ALGUM, 
confiar nos defaults de NLS - LOCALIZE na tal rotina onde que vc faz conversão 
(INCLUSIVE implícita, via SQL!!) e/ou usa built-ins de data/hora/TZdatabase ou 
de sessão e EXPLICITAMENTE indique os formatos/datatype/linguagem/setting NLS 
que vc deseja...

  []s
  
Chiappa

Re: [oracle_br] Re: Sub Query

2015-02-04 Por tôpico jlchia...@yahoo.com.br [oracle_br]
Aí muda um pouco de figura : Então, para esses casos em que vc não precisa 
retornar informação de uma tabela mas sim só pesquisar se uma condição existe, 
aí o mais indicado seria mesmo o EXISTS , ele serve para isso. A consulta 
ficaria :

Select *
from Mestre m
where exists(select 1
   from Detalhe d
  where m.NumNota= d.NumNota  
and m.Serie  = d.Serie
and m.Fornecedor = d.Fornecedor
and m.TipoMovto  = d.TipoMovto
and d.Item   = v_item
 );

em português, estamos dizendo acima : leia cada linha da tabela Mestre, e para 
cada linha lida verifique se existe uma linha correspondente na Detalhe E que 
além disso o Item seja o especificado  - automagicamente as linhas da Mestre 
que não tiverem Correspondência não são exibidas, essa é a função do EXISTS, dá 
uma estudada no manual SQL Reference (e num bom livro de linguagem SQL para 
mais detalhes...

 []s
 
   Chiappa

RE: [oracle_br] Re: Sub Query

2015-02-04 Por tôpico 'Schiavini' et...@schiavini.inf.br [oracle_br]
Uma opção alternativa ao exists:

 

select ...

  from a

where ( a.c1, a.c2 ) in ( select b.c1, b.c2

 from b

where b.c3 = ... )

 

Étore

 

From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] 
Sent: quarta-feira, 4 de fevereiro de 2015 08:56
To: oracle_br@yahoogrupos.com.br
Subject: Re: [oracle_br] Re: Sub Query

 

  

Chiappa, na realidade eu NÃO quero trazer nenhuma coluna da tabela Detalhes, eu 
apenas quero filtrar por uma coluna da tabela Detalhes. Se fizer o join entre 
as duas tabelas, vai replicar os mesmos dados da tabela Mestre tantas vezes 
quanto houver itens na tabela Detalhes. Nao tentei fazer um Select distinct pra 
eliminar essa duplicação...vou tentar isso tb...

 

Obrigado.

 

Emerson




Emerson Sanches
Analista de Sistemas

 

Em 3 de fevereiro de 2015 17:23, jlchia...@yahoo.com.br [oracle_br] 
oracle_br@yahoogrupos.com.br escreveu:

  

Para que vc precisa de sub-query ??? Se Realmente NumNota, Serie, Fornecedor e 
TipoMovto é a PK ** e ** isso está Presente nas duas tabelas como Chave, por 
que vc não faz um JOIN entre as duas ?? Assim :

SELECT colunasdesejadasTANTOdatabeladeNOTAquantodaITEM
  FROM Mestre m, Detalhe d
 WHERE m.NumNota= i.NumNota   
   AND m.Serie  = i.Serie 
   AND m.Fornecedor = i.Fornecedor
   AND m.TipoMovto  = i.TipoMovto 
   AND d.Item = v_item;

[]s

  Chiappa

 





[As partes desta mensagem que não continham texto foram removidas]



Re: [oracle_br] Sub Query

2015-02-04 Por tôpico Evandro Giachetto evandrogiache...@gmail.com [oracle_br]
select 1 mesmo
ou select null.
O importante é a query retornar algum valor.
* tbm funciona, mas você vai foçar dados que não vai usar pra memória, o
que não é interessante.

Evandro Giachetto
Oracle DBA
evandrogiache...@gmail.com


Em 3 de fevereiro de 2015 17:22, Emerson Sanches emerson.sanc...@gmail.com
[oracle_br] oracle_br@yahoogrupos.com.br escreveu:



 Acho que voce matou Evandro. Só uma duvida, no 1 exemplo a sintaxe é where
 exists (select 1 from ou .where exists (select * from?

 Muito obrigado.

 Emerson Sanches
 Analista de Sistemas

 Em 3 de fevereiro de 2015 16:55, Evandro Giachetto
 evandrogiache...@gmail.com [oracle_br] oracle_br@yahoogrupos.com.br
 escreveu:



 Não sei se entendi muito bem sua dúvida, se não, peço desculpas.

 Tente algo do tipo:


 Select *
 from Mestre
 where exists (select 1 from Detalhe
  where  Detalhe.NumNota = 
 Mestre.NumNota
 and Detalhe.Serie = Mestre.Serie and Detalhe.Fornecedor =
 Mestre.Fornecedor and Detalhe.TipoMovto = Mestre.TipoMovto and Detalhe.Item
 = item).

 Ou

 Select *
 from Mestre
 where (NumNota, Serie, Fornecedor, TipoMovto) in (select NumNota, Serie,
 Fornecedor, TipoMovto from Detalhe where Item = item);


 Só lembrando.

 Por questão de performance.

 Se seu Subselect (select ... from Detalhe where Item = %Item) trouxer um
 número pequeno de dados, então o segundo exemplo deve exectuar mais rápido.

 Se por ventura, este subselect trouxer um número muito grande de
 resultados, então a primeira opção deve apresentar uma performance melhor.

 Se a quantidade de resultados for balanceada entre as duas queries, então
 as duas opções devem mostrar performance semelhante.


 Evandro Giachetto
 Oracle DBA
 evandrogiache...@gmail.com


 Em 3 de fevereiro de 2015 16:41, Emerson Sanches
 emerson.sanc...@gmail.com [oracle_br] oracle_br@yahoogrupos.com.br
 escreveu:



 Bom tarde a todos do grupo. Em meu sistema tenho uma tabela de NF cuja
 chave primaria são os campos NumNota, Serie, Fornecedor, TipoMovto e outra
 tabela com os detalhes dessa nota com chave primaria composta por NumNota,
 Serie, Fornecedor, TipoMovto e Item. Ate tudo normalíssimo, acredito que
 todos tenham uma normalização desse tipo em seus sistemas.
 O problema é que meu chefe quer que eu faça uma pesquisa de notas
 fiscais, mas quer ter como parâmetro de busca o item da nota fiscal, ou
 seja, ele quer pesquisar pelo código de entrada do produto. Para resolver
 isso fiz um subquery assim:

 Select *
 from Mestre
 where  Mestre.NumNota in (Select  Detalhe.NumNota
  fromDetalhe
  where  Detalhe.Item = item)


 Essa solução funciona parcialmente, pois vai me trazer a nota do item
 pesquisado, mas também vai trazer a nota de outro fornecedor qualquer, que
 tenha uma nota com o mesmo numero cadastrado no sistema. Para resolver isso
 eu teria que passar no subquery todos o campos da PK da tabela Mestre, e é
 exatamente isso que não sei como fazer. Se alguém tiver alguma sugestão,
 todas serão bem vindas.

 Obrigado



 Emerson Sanches



  



Re: [oracle_br] Re: Sub Query

2015-02-04 Por tôpico Emerson Sanches emerson.sanc...@gmail.com [oracle_br]
Problema resolvido. Obrigado a todos pela atenção.

Emerson

Emerson Sanches
Analista de Sistemas

Em 4 de fevereiro de 2015 11:15, 'Schiavini' et...@schiavini.inf.br
[oracle_br] oracle_br@yahoogrupos.com.br escreveu:



 Uma opção alternativa ao exists:

 select ...

 from a

 where ( a.c1, a.c2 ) in ( select b.c1, b.c2

 from b

 where b.c3 = ... )

 Étore

 From: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br]
 Sent: quarta-feira, 4 de fevereiro de 2015 08:56
 To: oracle_br@yahoogrupos.com.br
 Subject: Re: [oracle_br] Re: Sub Query

 Chiappa, na realidade eu NÃO quero trazer nenhuma coluna da tabela
 Detalhes, eu apenas quero filtrar por uma coluna da tabela Detalhes. Se
 fizer o join entre as duas tabelas, vai replicar os mesmos dados da tabela
 Mestre tantas vezes quanto houver itens na tabela Detalhes. Nao tentei
 fazer um Select distinct pra eliminar essa duplicação...vou
 tentar isso tb...

 Obrigado.

 Emerson

 Emerson Sanches
 Analista de Sistemas

 Em 3 de fevereiro de 2015 17:23, jlchia...@yahoo.com.br [oracle_br] 
 oracle_br@yahoogrupos.com.br escreveu:

 Para que vc precisa de sub-query ??? Se Realmente NumNota, Serie,
 Fornecedor e TipoMovto é a PK ** e ** isso está Presente nas duas tabelas
 como Chave, por que vc não faz um JOIN entre as duas ?? Assim :

 SELECT colunasdesejadasTANTOdatabeladeNOTAquantodaITEM
 FROM Mestre m, Detalhe d
 WHERE m.NumNota = i.NumNota
 AND m.Serie = i.Serie
 AND m.Fornecedor = i.Fornecedor
 AND m.TipoMovto = i.TipoMovto
 AND d.Item = v_item;

 []s

 Chiappa

 [As partes desta mensagem que não continham texto foram removidas]