Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Samuel Mattos

[Resolvido] Postgres para Oracle

Recommended Posts

Boa tarde,

estou transferindo uma aplicação de postgres para oracle, a seguinte SQL faz a consulta na tabela usuários e traz somente os usuários que estão em um cargo igual ou abaixo de quem fez a consulta.

 

SELECT *
               FROM usuarios
               WHERE login_usu LIKE '%'
                   AND nm_usu LIKE '%'
                   AND id_usu IN
                   (
                       SELECT id_usu
                       FROM usu_grup_cargo ugc_usu
                       INNER JOIN cargos_aninhados ca
                           ON (ugc_usu.id_cargo = ca.id_cargo)
                       WHERE ROW(ugc_usu.id_grupo, ugc_usu.id_cargo) IN
                       (
                           SELECT filho.id_grupo, adm_ca_filho.id_cargo
                           FROM grupos_aninhados filho
                           INNER JOIN grupos_aninhados pai
                               ON (filho.esquerda >= pai.esquerda AND filho.direita <= pai.direita)
                           INNER JOIN usu_grup_cargo ugc
                               ON (ugc.id_grupo = pai.id_grupo AND ugc.id_usu = 1)
                           INNER JOIN cargos_aninhados adm_ca_pai
                               ON (ugc.id_cargo = adm_ca_pai.id_cargo)
                           INNER JOIN cargos_aninhados adm_ca_filho
                               ON (adm_ca_filho.esquerda >= adm_ca_pai.esquerda AND adm_ca_filho.direita <= adm_ca_pai.direita)
                           WHERE filho.esquerda >=
                           (
                               SELECT esquerda
                               FROM grupos_aninhados
                               WHERE id_grupo = 1
                           )
                           AND filho.direita <=
                           (
                               SELECT direita
                               FROM grupos_aninhados
                               WHERE id_grupo = 1
                           )
                           AND pai.id_grupo IN
                           (
                               SELECT ugc.id_grupo
                               FROM usu_grup_cargo ugc
                               INNER JOIN cargos_mod_perm cmp
                               ON ugc.id_cargo = cmp.id_cargo
                               WHERE cmp.id_mod = 8
                               AND cmp.permissao = 3
                               AND id_usu = 1
                           )
                       )
               )ORDER BY login_usu;

 

No Oracle ele da erro na seguinte instrução WHERE ROW "Erro de SQL: ORA-00936: expressão não encontrada" como que eu faço para verificar uma row com o oracle?

 

Desde já agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente ...

 

...
WHERE (ugc_usu.id_grupo, ugc_usu.id_cargo) IN
                       (
                           SELECT filho.id_grupo, adm_ca_filho.id_cargo
...

 

sem o ROW

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.