seguinte, tivemos problema com o servidor que pegou fogo, foi recuperado, porém não estou conseguindo compilar uma view
se eu executo:
select * from v_view
, funciona
se eu executo a query da view, também funciona
select 1 campo from dual
Porém, quando tento recompilar a view, dá erro
create or replace view v_view as
select 1 campo from dual
No caso, minha query tem várias tabelas, estava dando esse erro numa tabela, consegui solucionar com o comando
grant select on owner1.tabela to owner2 with grant option;
Mas para a segunda tabela, esse comando não funcionou.
executei o revoke e depois novamente o grant e também não foi
REVOKE all ON owner1.tabela FROM owner2;
Isso é em ambiente de homologação e percebi que o campo grantable está YES e em produção está setado para NO com o comando abaixo e em produção está funcionando, consigo compilar a view
select * from user_tab_privs where table_name = 'tabela'
Alguém tem idéia do que pode ser? o que é que está pegando?
Obrigado
Fiz um select que tras 4 informações do banco (matricula, nome, data e hora)
SELECT
QD1_MAT,
RA_NOME,
QD1_DTBAIX AS DATA,
QD1_HRBAIX
FROM QD1010 QD1
INNER JOIN SRA010 SRA ON RA_MAT = SUBSTR(QD1_MAT, 5) AND SRA.D_E_L_E_T_ <> '*'
ORDER BY QD1_DTBAIX, QD1_HRBAIX
Retornando os seguintes registros:
Preciso retornar somente as linhas em amarelo, que seria a seguinte condição.
Caso tiver alguma matricula igual, trazer somente o registro com a maior data, junto com seu respectivo horário.
O mais próximo que consegui chegar foi utilizando o MAX para data e hora, e agrupando o restante dos campos.
SELECT QD1_MAT,RA_NOME,MAX(DATA), MAX(QD1_HRBAIX) FROM (
SELECT
QD1_MAT,
RA_NOME,
QD1_DTBAIX AS DATA,
QD1_HRBAIX
FROM QD1010 QD1
INNER JOIN SRA010 SRA ON RA_MAT = SUBSTR(QD1_MAT, 5) AND SRA.D_E_L_E_T_ <> '*'
)
GROUP BY QD1_MAT,RA_NOME
Porém na hora ele não pega o valor correspondente e sim o valor máximo.
Ai estou travado nessa parte, como faço para trazer a hora corresponde sem o restante dos registros?
Boa tarde. Estou com o seguinte problema: Preciso retornar um selct da seguinte maneira:
exemplo que não funciona:
select codusur,numnota,codcli,cliente,vltotal,numtransvenda,dev,decode(vlvenda),if(vlvenda > 100 then 1 else 2)
from(
select tb1.codusur,tb1.numnota,tb1.codcli,tb1.cliente,tb1.vltotal,tb1.numtransvenda,DECODE(tb2.VLTOTAL,NULL,0,tb2.VLTOTAL)DEV
from(
select codusur,numnota,pcnfsaid.codcli,pcnfsaid.cliente,pcnfsaid.vltotal,pcnfsaid.numtransvenda
from pcnfsaid where pcnfsaid.dtsaida > '01-OCT-2020' and pcnfsaid.dtcancel is null
)tb1
left outer join
(select DISTINCT VLTOTAL,VW_INTEGRA_DEVOLUCAO_TOTAL.NUMTRANSVENDA from VW_INTEGRA_DEVOLUCAO_TOTAL )tb2
on tb1.NUMTRANSVENDA = tb2.NUMTRANSVENDA
order by numnota
)
Como pode reparar, eu usei um if/else já que não sei a forma correta de usar. Pois com DECODE não consegui usar uma forma de fazer a comparação.
Pois preciso mesmo retornar uns valores fixos. Ex:
Se o valor > 40000, retorna um valor x; Se for maior que 5000 retorna um valor y.
Aguardo a ajuda dos amigos. Grato
boa tarde.
Estou precisando de um Select que retorne uma soma que ao chegar a determinado valor ela reinicie e continue fazendo sucessivamente
select
pedido,
volume,
limite,
SUM(volume) over (order by pedido ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) saldo
from pedidos
group by pedido
o select está retornando assim porém quero que toda vez que chegue ou passe do limite resete o saldo, por exemplo parar no 100 que é o limite e começar um novo saldo
pedido volume limite saldo
1 70 100 70
2 10 100 80
3 20 100 100
4 50 100 150
5 30 100 180
preciso que ele soma o volume enquanto o saldo seja <= que o "limite", quando passar pare de somar e comece outra soma começando do 0, como no exemplo abaixo.
pedido volume limite saldo
1 70 100 70
2 10 100 80
3 20 100 100
4 50 100 50
5 30 100 80