Prezados,
Criei um cursor com dados de tabelas de 2 schemas " A e B " diferentes, estou criando no schema "A" a procedure e criei também sinônimos das tabelas do schema "B", porem não consigo compilar, pois o pl mostra "erro de tabela inexistente".
Para verificar se o sinônimo esta correto, executei um select no schema "A" e o mesmo trouxe as informações sem apresentar nenhum erro.
Como posso executar um cursor numa store procedure de tabelas de schemas diferente???
muito obrigado
junior.tordoya
Criar Cursor na Procedure de tabelas com schema diferentes
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Seg, 27 Ago 2012 8:19 pm
-
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Seg, 27 Ago 2012 8:19 pm
segue exemplo:
estou acessando o schema teste 1, onde todas as tabelas pertencem a este esquema, menos a XMPRODUTO E XMDERIVACAO
foi criado os sinominos:
create or replace synonym XMPRODUTO
for teste2.produto;
create or replace synonym XMDERIVACAO
for teste2.derivacao;
estou acessando o schema teste 1, onde todas as tabelas pertencem a este esquema, menos a XMPRODUTO E XMDERIVACAO
create or replace procedure SP_VENDA_COTACAO IS
CURSOR venda_quinze IS
SELECT LKP.CODIGOPRODUTO,
LKP.CLASSEPRODUTO,
LKP.TIPOUC,
LKP.FATORTIPOUC,
SUM(LKP.QUANTIDADEATUAL) AS QUANTIDADEATUAL,
SUM(LKP.QUANTIDADEATUAL / LKP.FATORTIPOUC) AS QUANTIDADEATUALFATOR,
SUM(LKP.QUANTIDADEBLOQUEADO) AS QUANTIDADEBLOQUEADO,
SUM(LKP.QUANTIDADEBLOQUEADO / LKP.FATORTIPOUC) AS QUANTIDADEBLOQUEADOFATOR,
SUM(LKP.QUANTIDADEEMPENHADO) AS QUANTIDADEEMPENHADO,
LKP.CODIGOMATRIZ AS CODIGODEPOS,
SUM(LKP.QUANTIDADEEMPENHADO / LKP.FATORTIPOUC) AS QUANTIDADEEMPENHADOFATOR,
SUM(LKP.QUANTIDADERESERVA) AS QUANTIDADERESERVA,
SUM(LKP.QUANTIDADEATUAL + LKP.QUANTIDADEBLOQUEADO +
LKP.QUANTIDADEEMPENHADO) AS TOTAL,
NVL(SUM(LKP.QUANTIDADEATUAL), 0) -
NVL(SUM(LKP.QUANTIDADERESERVA), 0) AS QTD_DISPONIVEL_ESTOQUE,
XMDERIVACAO.PREMED AS preço_MEDIO,
TO_CHAR(SYSDATE,'DD/MM/YYYY') AS data_a,
XMDERIVACAO.DESDER,
XMPRODUTO.CODPRO,
XMPRODUTO.DESPRO,
XMPRODUTO.UNIMED
FROM (SELECT LE.CODIGOPRODUTO,
LES.CLASSEPRODUTO,
LES.TIPOUC,
LES.FATORTIPOUC,
LES.QUANTIDADEATUAL,
LES.QUANTIDADEBLOQUEADO,
LES.QUANTIDADEEMPENHADO,
LE.CODIGOMATRIZ,
NVL((SELECT SUM(RES.QUANTIDADERESERVA)
FROM ENDERECORESERVA RES, COLETORMENSAGEM COL
Where RES.CODIGOESTABELECIMENTO =
LES.CODIGOESTABELECIMENTO
And RES.LOTEENTRADA = LES.LOTEENTRADA
AND RES.LOTEENTRADASEQUENCIA =
LES.LOTEENTRADASEQUENCIA
AND RES.TIPORESERVA = 2
AND RES.QUANTIDADERESERVA > 0
AND RES.CODIGOESTABELECIMENTO =
COL.CODIGOESTABELECIMENTO
AND RES.CODIGOMENSAGEM = COL.CODIGOMENSAGEM
AND COL.CODIGOTAREFA <> 170),
0) QUANTIDADERESERVA
FROM LOTEENTRADA LE, LOTEENTRADASEQUENCIA LES
WHERE LE.CODIGOESTABELECIMENTO = LES.CODIGOESTABELECIMENTO
AND LE.LOTEENTRADA = LES.LOTEENTRADA
AND LE.CODIGOESTABELECIMENTO = 1
--AND (LE.CODIGOMATRIZ = '11')
AND LES.CLASSEPRODUTO = 'OK') LKP
LEFT JOIN XMDERIVACAO
ON Decode(INSTR(LKP.CODIGOPRODUTO, '.'),
0,
NULL,
Substr(LKP.CODIGOPRODUTO,
INSTR(LKP.CODIGOPRODUTO, '.') -
LENGTH(LKP.CODIGOPRODUTO),
4)) = XMDERIVACAO.CODDER
AND Decode(INSTR(LKP.CODIGOPRODUTO, '.'),
0,
LKP.CODIGOPRODUTO,
Substr(LKP.CODIGOPRODUTO,
1,
INSTR(LKP.CODIGOPRODUTO, '.') - 1)) =
DER.CODPRO
LEFT JOIN XMPRODUTO
ON Decode(INSTR(LKP.CODIGOPRODUTO, '.'),
0,
LKP.CODIGOPRODUTO,
Substr(LKP.CODIGOPRODUTO,
1,
INSTR(LKP.CODIGOPRODUTO, '.') - 1)) =
XMPRODUTO.CODPRO
Having SUM(LKP.QUANTIDADEATUAL + LKP.QUANTIDADEBLOQUEADO + LKP.QUANTIDADEEMPENHADO) > 0
GROUP BY LKP.CODIGOPRODUTO, LKP.CLASSEPRODUTO, LKP.TIPOUC, LKP.FATORTIPOUC,XMDERIVACAO.PREMED,
XMDERIVACAO.DESDER,XMPRODUTO.CODPRO,XMPRODUTO.DESPRO,XMPRODUTO.UNIMED,LKP.CODIGOMATRIZ;
venda_1 venda_quinze%ROWTYPE;
BEGIN
.......
foi criado os sinominos:
create or replace synonym XMPRODUTO
for teste2.produto;
create or replace synonym XMDERIVACAO
for teste2.derivacao;
-
- Moderador
- Mensagens: 641
- Registrado em: Seg, 03 Set 2007 3:26 pm
- Localização: Fortaleza - CE
att,
Daniel N.N.
Daniel N.N.
Depois de você criar:
"create or replace synonym XMPRODUTO
for teste2.produto;"
você consegue fazer um select tanto em "XMPRODUTO" quanto em "teste2.produto"?
Tentou colocar "teste2.produto" na procedure diretamente assim?
Agora outro detalhe. É bem doloroso esse teu join com essas tabelas, cheios de substrings, decodes...
Existe falha de projeto desse sistema que você está mechendo.
"create or replace synonym XMPRODUTO
for teste2.produto;"
você consegue fazer um select tanto em "XMPRODUTO" quanto em "teste2.produto"?
Tentou colocar "teste2.produto" na procedure diretamente assim?
Agora outro detalhe. É bem doloroso esse teu join com essas tabelas, cheios de substrings, decodes...
Existe falha de projeto desse sistema que você está mechendo.
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes