Count distinct e max data - Portuguese

SELECT DISTINCT FOCCO3I.TMOV_ESTQ.DT,  FOCCO3I.TMOV_ESTQ.MOV_ESTQ_IDFROM FOCCO3I.TMOV_ESTQ  Como faço um Count distinct no FOCCO3I.TMOV_ESTQ.MOV_ESTQ_IDComo faço um MAX(Date no FOCCO3I.TMOV_ESTQ.DT,) Precisava do sql completo.Alguma sugestão?  Preciso que fique assimCod(Count)           data(Max)4132                    15/01/20174133                   15/05/2016

Olá, vocês pode utilizar group by com SUM/COUNT para realizar essa consulta,segue em exemplo abaixo, você só deve conferir as colunas se estão de acordo com seu conteúdo desejado. SELECT FOCCO3I.TMOV_ESTQ.DT,    COUNT(FOCCO3I.TMOV_ESTQ.MOV_ESTQ_ID) as data_groupFROM FOCCO3I.TMOV_ESTQGROUP BY FOCCO3I.TMOV_ESTQ.DT espero ter ajudado, valeu

Related

Conectar ao banco de teste

Bom dia pessoal.. Efetuei a instalação do Oracle Database 11g Express Edition e do SQL Developer, porém não estou conseguindo conectar o usuário "administrador" com o banco que a própria Oracle disponibiliza, alguém poderia me passar os parâmetros.
Olá,  Você está tentando conectar utilizando o usuário sys/system ou autenticação via S.O.?Creio que no seu caso devas utilizar o sys/system (visto que é um primeiro acesso) junto a senha que colocaste na instalação.Caso já esteja realizando isso e esteja aparecendo algum erro, pode colar ele aqui, assim o pessoal têm maiores informações para saber com o que estamos lidando. Espero ter ajudado,Anatoli A.
Boa tarde Anatoli. Sim estou utilizando o  usuário system, ou seja, estou conseguindo logar como "administrador". O que não consigo é utilizar o ambiente de teste fornecido pela própria Oracle.
Olá, Ok, então você consegue conectar como system. Qual erro está encontrando na sua tentativa de utilizar o banco XE?

Tuning loop for

Ola a todos, Existe um processo de carga que preciso ler os dados de uma tabela e gravar em outra tabela. Atualmente ele esta usando um processo de for x in (select * from tabela) loop e chama uma procedure que faz os inserts, essa procedure de insert existem alguma validações. O Problema que esse processo esta levando 2 horas. Pensei em usar o forall para ganhar performace. PrimeiroEsse é o melhor processo? SegundoMesmo usando esse forall não estou conseguindo chamar a procedure. CREATE OR REPLACE PROCEDURE TESTE_FORALL IS  TYPE TOBJECTTABLE IS TABLE OF tabela%ROWTYPE;  T TOBJECTTABLE;BEGIN  SELECT * BULK COLLECT INTO T FROM tabela;  FORALL X IN T.FIRST..T.LAST    TESTE_INSERT(T(X).coluna1, T(X).coluna2, T(X).coluna3......); -- essa é a procedure que faz o insert ou updateEND;/ Poderiam me ajudar com esse problema? Desde ja Agradeço AtCesar Moraes
Olá,Dessa forma, com FORALL, você não irá conseguir fazer!Dá uma olhada nesse post do Tom Kyte:https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:4409852000346388515 Você não consegue colocar essas validações em um WHERE no seu "SELECT * BULK COLLECT INTO T FROM tabela" ? 
Opa, Consigo colocar quase todas rsrs. Como eu to migrando os dados de uma tabela A para uma tabela B caso os dados já estejam em B ele faz um update senão um insert, porém quando faz um insert ele precisa inserir eu outra tabela para registrar. Pensei no Merge mas ele não faz insert em outra tabela. A melhor solução seria 2 forall? 1 forall com os dados comuns e ai faz um update1 forall com os dados não encontrados e ai faz um insert na duas tabela Essa solução parece ruim pois precisa fazer o select 2 vezes, e demorando o dobro do tempo.
Olá, Apesar do processo com BULK utilizando FORALL ser mais rápido do que o simples LOOP, esta não é a melhor forma de se fazer. Mude este código por um simples INSERT AS SELECT. E se estiver na versão Enterprise, habilite paralelismo na sessão. ALTER SESSION ENABLE PARALLEL DML;INSERT /*+ APPEND */ INTO TABELA01 AS SELECT * FROM TABELA02;COMMIT;  Existe algum motivo em não copiar a tabela como um todo com um CREATE TABLE AS SELECT?  Abraços.
Bom dia, Qual a versão do seu banco ?É Enterprise? Você possui Dataguard? Caso não possua, pode considerar usar um alter table yourtable nologging; (lembre-se também das questões de backup e recovery envolvidas em nologging operation). A idéia que eu dei inicialmente foi de eliminar tudo que é PL/SQL e tentar fazer diretamente em SQL. Você possui triggers, constraints ou índices nessa tabela que irá fazer insert ou update?Você tem CPUs e o I/O é suficiente para utilizar paralelismo e Direct-load INSERT ?Leve isso em consideração para utilizar o /*+ APPEND */ no insert  e Parallel no select. Você pode usar CREATE TABLE ... AS SELECT ? Você não pode usar um select com exists para saber os registros q já estão presentes e também os que não estão?   SELECT *  FROM tabelaB a where not exists (select 1 from tabelaA b where a.id=b.id); Abs

ODBC ORACLE x ACCESS

Precisei fazer uma ODBC do meu banco (11g) para o access para buscar informações de tabelas em tempo real em relatórios montados no access e estou com uma dificuldade em uma coisa:Fiz a mesma conexão em dois pcs, todos os dois windows 7, 32bt, mesma versão do access... salvo a diferença do processador dos dois pcs, um deles i3 e outro atom, eles estão idênticos!Porem em um deles num campo de uma das tabelas que possui valores separados por vírgula, na importação via ODBC traz exatamente o valor igual à tabela no oracle, no outro pc ele traz o número inteiro sem a virgula e quando acrescento ele poe a virgula e mais dois "0", ous seja, em um deles traz valor 1000,00 (correto), no outro traz 100000 e se colocar como decimal ele acrescenta  (100000,00);Conseguiu entender? Sabem o motivo disso? Obrigado
É bem provável que você esteja com problemas de NLS. Após abrir conexão ODBC com o BD execute a consulta select * from nls_session_parameters;  e veja se o resultado é diferente na máquina que traz os valores errados. Se sim, leia o artigo http://www.fabioprado.net/2012/11/configurando-national-language-support.html para entender melhor o problema e tentar resolvê-lo configurando NLS_LANG.  Infelizmente não tenho ambiente para testar e reproduzir o problema! []s 
Eu vou fazer os testes e posto o resultado;Obrigado
Fábio!Muito Obrigado!Exatamente igual você disse! Era o NLS!E foi muito fácil resolver:No caminho de editor de registro do Windows (regedit), fui em HKEYLOCALMACHINE/SOFTWARE/ORACLE, o campo NLSLANG, no computador que dava certo estava AMERICAN-AMERICAN  e no que não funcionava estava PORTUGUESE-BRAZIL.Foi só copiar o AMERICAN-AMERICAN e colar lá no lugar do PORTUGUESE que deu certo!Abraço

Desfazer restauração, é possível?

Olá pessoal,Havia perguntado na comunidade PL/SQL, porém ninguém respondeu...Realizei uma restauração para um determinado dia e horário, porém os dados que eu gostaria não estavam naquele horário...Como faço pra voltar uma restauração feita? É possível reverter a restauração da base, deixando no estado anterior da restauração?Oracle 11g EE, base em archivelog. Realizei com RMAN, com o seguinte script:run{set until time "to_date('27/07/2015 13:00:00','dd/mm/yyyy hh24:mi:ss');restore database;recover database;} Fico no aguardo.Obrigado pessoal. Abs
Olá Guilherme, Se compreendi bem a sua pergunta... você poderia fazer um restore de volta para a posição anterior (usando um set until scn), porém precisará lidar com a questão das "incarnations" do banco. Teria de verificar pelo rman, as incarnations e os seus scns correspondentes e realizar um reset para uma posição antes de você ter aberto o seu banco com resetlogs pela última vez, antes de realizar o restore.  Espero que ajude,Anatoli A.
Olá AnatoliAndrei,Exato.Realizei a restauração da base pro dia 27/07/2015 às 13:00, porém não é o horário que eu realmente gostaria (procurava).Conforme verificação dos "incarnations", obtive 3 resultados, sendo o terceiro com marcação do dia 29/07/2015 que foi o dia que realizei a restauração.Acredito que ele tenha "marcado" esse ponto, então resolvi voltar a restauração feito pro dia 29/07/2015, utilizando o scn correspondente, porém quando executo a restauração me devolve o seguinte erro: RMAN-20208: UNTIL CHANGE is before RESETLOGS change, ou seja, não estou conseguindo voltar pro dia 19/07/2015, que foi a data de alteração da base.O que devo fazer? Obrigado pela ajuda. Abs 
***Corrigindo: "RMAN-20208: UNTIL CHANGE is before RESETLOGS change, ou seja, não estou conseguindo voltar pro dia 29/07/2015, que foi a data de alteração da base."
Guilherme, Ok, como comentei antes, você precisa realizar um reset para o incarnation antes do último open resetlogs. Se você possui 3 incarnations listados e o terceiro é o do dia 29, esse foi gerado automaticamente após você realizar o seu restore mal sucedido e abrir o banco (incarnations são gerados quando você dá o open resetlogs), logo, em tese o que deve ser feito é realizar um reset para o incarnation 2 e rodar o restore/recover até a posição desejada. Alguns links que talvez ajudem a entender melhor o assunto... http://docs.oracle.com/cd/B28359_01/backup.111/b28273/rcmsynta036.htm RMAN Recover to a Previous Incarnation Anatoli A.
AnatoliAndrei,Muito obrigado pela ajuda!!!!Consegui aqui, está tudo ok.Mais uma vez obrigado!Abs

Ajuda TRIGGER

Boa tarde... Pessoal preciso criar uma trigger  de insert onde eu consiga pegar o comando executado na SQL_TEXT, ou seja neste campo preciso do comando insert into.....  Podem me ajudar? CREATE OR REPLACE TRIGGER T_AUD BEFORE INSERT tab1       FOR EACH ROW        WHEN (SYS_CONTEXT('USERENV','OS_USER') IN ('fulano1', 'fulano2'))DECLARE        NUM_SEQ_NEXT    NUMBER;       S_SID           NUMBER;       S_SERIAL        NUMBER;                     USERNAME1       VARCHAR2(30);       OSUSER1         VARCHAR2(30);       MACHINE1        VARCHAR2(64);       PROGRAM1        VARCHAR2(48);       V_SQL         VARCHAR2(3000);              LOGON_TIME1     DATE; BEGIN        SELECT DISTINCT SS.SID, SS.SERIAL#, SS.USERNAME, SS.OSUSER, SS.MACHINE, SS.PROGRAM , SS.LOGON_TIME, ST.SQL_ID, SS.STATUS, ST.SQL_TEXT           INTO S_SID, S_SERIAL, USERNAME1, OSUSER1, MACHINE1, PROGRAM1, LOGON_TIME1, V_SQL         FROM V$SESSION SS, V$SQLTEXT ST        WHERE SS.SQL_ADDRESS = ST.ADDRESS          AND SS.SQL_HASH_VALUE = ST.HASH_VALUE;               SELECT SEQ_T_LOG.NEXTVAL         INTO NUM_SEQ_NEXT         FROM DUAL;--        IF INSERTING THEN           INSERT INTO TAB1_LOG (COD_CONSULTA, NUM_SID, NUM_SERIAL, USERNAME, MAQUINA, OS_USER, PROGRAMA, DTA_LOGIN, SQL_RODADO)                  VALUES (NUM_SEQ_NEXT, S_SID, S_SERIAL, USERNAME1, MACHINE1, OSUSER1, PROGRAM1, SYSDATE, V_SQL);        END IF;END;
Olá, Bom, um conselho que lhe daria é para criar a trigger como "AFTER INSERT", pois em tese da forma como nos mostrou vão ser inseridos registros mesmo que a transação falhe ou os mesmos sejam alterados, etc...Outra coisa, é possível que da forma que o seu comando está estruturado não traga o sql completo executado. Confesso que não sei se a "manha" de criar um lob temporário, para assim retornar o comando completo, funcionaria no seu caso... precisaria de um tempo testar. Curiosidade, por que não habilitas a auditoria do banco para inserts nessa tabela? Espero ter ajudado,Anatoli A.
Ola....AnatoliAndrei Obrigado pelo conselho.Vou estudar como criar este lob temporário....Pensei na trigger pois não são todos os inserts nesta tabela que preciso e sim de 2 ou 3 usuários específicos somente.

Categories

Resources