Auxilio requisicao usuaria em plsql - package

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
LCA
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 13 Out 2015 12:56 pm

PROCESSO

PESSOAL
NECESSITO FAZER UM PROCESSO QUE CONSISTE NO SEGUINTE
A AREA USUARIA SOLICITOU QUE IRIA ME FORNECER UM ARQUIVO DE ENTRADA E EU DEVERIA ATRAVES DA EXECUCAO DAS SOLICITACOES DA USUARIA GERAR UM ARQUIVO DE SAIDA
A IDEIA É MAIS OU MENOS ASSIM
A PRINCIPIO EU TENHO DUAS QUERYS ....A PRIMEIRA GERA 150 ITENS E A SEGUNDA 900 ITENS TOTALIZANDO 1150 ITENS
AS DUAS QUERYS GERARAO RESULTADOS ESPECIFICOS E DEPOIS SERA NECESSARIO UNIR O RESULTADO DE AMBAS E DEVOLVER EM UM ARQUIVO TXT COM SEPARADOR PONTO E VIRGULA(;) EM UM DIRETORIO ESPECIFICADO

O PROCESSO FUNCIONA DA SEGUINTE FORMA



TEM UM ARQUIVO TXT (SEPARADOR PONTO E VIRGULA - ;)QUE SERA DISPONIBILIZADO EM UM DIRETORIO E ESSE ARQUIVO SERA LIDO E ALIMENTADO EM UMA TABELA A SER CRIADA EM TEMPO DE EXECUCAO(TABELA_AUXILIAR R - QUERY 2)
ESSA TABELA FARA UM JOIN COM A QUERY NUMERO 2 E IRA GERAR UM RESULTADO



A QUERY 1 IRA GERAR UM RESULTADO MAS ELA MEDIANTE A SOLICITACAO DA USUARIA TEM ALGUMAS PECULIARIDADES QUE FORAM O MOTIVO QUE RESOLVI LHES ESCREVER E POSTAR AQUI O PROBLEMA
A USUARIA QUER QUE
SEJAM SELECIONADOS POR EXEMPLO DE CADA TIPO DE CLIENTE UMA CONTA COM SALDO FATURA > 10 E UMA CONTA COM SALDOFATURA ENTRE 0 E 10 POR UF - 2 CONTAS
SEJAM SELECIONADOS DE CADA UF UM VALOR DO SALDO FATURA MAIOR DO QUE 10 E UM VALOR DO SALDO FATURA ENTRE 0 E 10

são 27 UFS E 27 TIPOS DE CLIENTES
IRIA FICAR MAIS OU MENOS ASSIM


tipo de cliente no sistema e hoje temos os seguintes tipos existentes :

Selecionar tudo

F	PESSOA FISICA
J	PESSOA JURIDICA PME DIRETO
A	CONCESSIONARIAS SERVICOS TELECOM
B	FUNCIONARIO CONSULAR ISENTO ICMS
C	GOVERNO FEDERAL-ADM. INDIRETA
D	GOVERNO FEDERAL-ADM.DIRETA
E	GOVERNO ESTADUAL- ADM. INDIRETA
G	GOVERNO ESTADUAL- ADM. DIRETA
H	GOVERNO MUNICIPAL- ADM. INDIRETA
I	GOVERNO MUNICIPAL- ADM. DIRETA
K	REPRESENTAC?O DIPLOMATICA
L	REPRESENTAC?O DIPLOMATICA ISENTA DE ICMS
M	TELEFONIA CELULAR
N	MONITORAC?O DO EQUIPAMENTO CELULAR
O	LOCAC?O
P	GRANDES CONTAS E CONTAS ESTRATEGICOS
Q	SOHO
V	CLIENTE NACIONAL
R	INATIVO
S	PESSOA FISICA – NCP
T	FUNCIONARIO  
U	CORPORATIVO UNO & CIA
X	PESSOA JURIDICA PME INDIRETO
Y	ASSOCIAC?O
W	EMPREGADO
1	ROAMING PRE-PAGO
3	CONTROLE
4	CONTROLE PJ
UFS

Selecionar tudo

Acre	AC	
Alagoas	AL	
Amapá	AP	
	Amazonas	AM	
	Bahia	BA	
	Ceará	CE	
	Distrito Federal	DF	
	Espírito Santo	ES	
	Goiás	GO	
	Maranhão	MA	
Mato Grosso	muito	
	Mato Grosso do Sul	MS	
	Minas Gerais	MG	
	Pará	PA	
Paraíba	PB	
Paraná	PR
	Pernambuco	PE
	Piauí	PI	
	Rio de Janeiro	RJ	
Rio Grande do Norte	RN	
	Rio Grande do Sul	RS
	Rondônia	RO	
	Roraima	RR	
	Santa Catarina	SC	
São Paulo	SP	
Sergipe	SE	
	Tocantins	TO	

ACREDITO QUE ELA PEDIU ALGO CONFORME ABAIXO

Selecionar tudo

UF SP							

TIPO DE CLIENTE					
F	 CONTA > 10 
	0<CONTA<10
J	 CONTA > 10 
	0<CONTA<10
A	 CONTA > 10 
	0<CONTA<10
B	 CONTA > 10 
	0<CONTA<10
C	 CONTA > 10 
	0<CONTA<10
D	 CONTA > 10 
	0<CONTA<10
E	 CONTA > 10 
	0<CONTA<10
G	 CONTA > 10 
	0<CONTA<10
H CONTA > 10 
	0<CONTA<10
ETC

UF RJ

TIPO DE CLIENTE
F	 CONTA > 10 
	0<CONTA<10
J	 CONTA > 10 
	0<CONTA<10
A	 CONTA > 10 
	0<CONTA<10
B	 CONTA > 10 
	0<CONTA<10
C	 CONTA > 10 
	0<CONTA<10
D	 CONTA > 10 
	0<CONTA<10
E	 CONTA > 10 
	0<CONTA<10
G	 CONTA > 10 
	0<CONTA<10
H CONTA > 10 
	0<CONTA<10
ETC


UF RS


TIPO DE CLIENTE
F	 CONTA > 10 
	0<CONTA<10
J	 CONTA > 10 
	0<CONTA<10
A	 CONTA > 10 
	0<CONTA<10
B	 CONTA > 10 
	0<CONTA<10
C	 CONTA > 10 
	0<CONTA<10
D	 CONTA > 10 
	0<CONTA<10
E	 CONTA > 10 
	0<CONTA<10
G	 CONTA > 10 
	0<CONTA<10
H CONTA > 10 
	0<CONTA<10
ETC
OU POR TIPO DE CLIENTE

Selecionar tudo

TIPO DE CLIENTE F
UF AC  CONTA > 10 
	0<CONTA<10
UF AM CONTA > 10 
	0<CONTA<10
UF AP CONTA > 10 
	0<CONTA<10
UF AL CONTA > 10 
	0<CONTA<10
UF BA CONTA > 10 
	0<CONTA<10
UF CE CONTA > 10 
	0<CONTA<10
UF DF CONTA > 10 
	0<CONTA<10
	
ETC



TIPO DE CLIENTE J
UF AC  CONTA > 10 
	0<CONTA<10
UF AM CONTA > 10 
	0<CONTA<10
UF AP CONTA > 10 
	0<CONTA<10
UF AL CONTA > 10 
	0<CONTA<10
UF BA CONTA > 10 
	0<CONTA<10
UF CE CONTA > 10 
	0<CONTA<10
UF DF CONTA > 10 
	0<CONTA<10
	
ETC



TIPO DE CLIENTE  A


UF AC  CONTA > 10 
	0<CONTA<10
UF AM CONTA > 10 
	0<CONTA<10
UF AP CONTA > 10 
	0<CONTA<10
UF AL CONTA > 10 
	0<CONTA<10
UF BA CONTA > 10 
	0<CONTA<10
UF CE CONTA > 10 
	0<CONTA<10
UF DF CONTA > 10 
	0<CONTA<10
	
ETC
QUERY 1
=======
SOLICITACOES DA USUARIA

-1) 1 Conta de Cada TIPO DE CLIENTE com valor DO SALDO FATURA > 10
--2) 1 Conta de Cada TIPO DE CLIENTE com valor DO SALDO FATURA ENTRE 0 E 10
--3) 1 Conta de Cada UF com valor DO SALDO FATURA > 10 27
--4) 1 Conta de Cada UF com valor DO SALDO FATURA 0 E 10

Selecionar tudo

SELECT /* + PARALLEL (B 8, CA 8) */ B.CONTA, B.DATACORTE, B.CICLO, B.SALDOFATURA, B.INDICADOR, B.MOTIVO, CSA.ESTADO, CSA.TIPO_CLIENTE
FROM TABELA WWW B, TABELA ZZZ CA
WHERE B.LOCALIZACAO_ID = CSA.LOCALIZACAO_ID
AND B.CONTA = CA.CONTA
AND B.DATACORTE = '20150815' AND B.CICLO = '15'
AND B.SALDOFATURA  > 0
TOTAL 150 ITENS


QUERY 2 - FAZ JOIN COM ARQUIVO TXT IMPUTADO DE ENTRADA QUE FOI ALIMENTADO NA TABELA AUXILIAR CRIADA EM TEMPO DE EXECUCAO E DROPADA APOS FIM DO PROCESSO
===============

LISTA GRUPO DE CLIENTES POR TIPO DE PRODUTO/SERVICO

--LISTA PLANOS E SERVIÇOS = 900 CASOS
--1 ) PODE SER IGUAL A UM NOME SERVICO
--2 ) PODE SER IGUAL A UM CODIGO DESCRICAO ITEM FATURA
--3 )PODE SER IGUAL A UM CODIGORELACIONAMENTOTABELASERVICO
--LISTAR 1 PRODUTO DE CADA CONTA OU MAIS DESDE QUE O TOTAL DE CONTAS SEJA IGUAL A 900

Selecionar tudo

SELECT /* + PARALLEL (CCI 8) */ CCI.CONTA, CCI.ASSINATURA_ID, CCI.DATACORTE, CCI.CICLO, CCI.VALORFATURA, 
CCI.NOMESERVICO, CCI.CODIGODESCITEMFATURA, CCI.CODIGORELACIONAMENTOTABELASERVICO, CCI.TIPOITEM, CSA.ESTADO  
FROM TABELA  XXX CCI, TABELA  YYY CSA, TABELA_AUXILIAR R
WHERE CCI.LOCALIZACAO_ID = CSA.LOCALIZACAO_ID
AND CCI.DATACORTE = '20150815' AND CCI.CICLO = '15'
AND CCI.TIPOITEM  IN ('C','D','P','R','S','T','E','I','W','K','L','M','N','X','G','O')
AND (CCI.NOMESERVICO = R.NOMESERVICO OR CCI.CODIGODESCITEMFATURA = R.CODIGODESCITEMFATURA OR CCI.CODIGORELACIONAMENTOTABELASERVICO = R.CODIGORELACIONAMENTOTABELASERVICO)

CONTA TENHA 10 DIGITOS
DATACORTE e o CICLO serão informados pelo usuário quando programar a execução do resultado(DINAMICO)
No resultado não pode haver contas repedidas.
A CONTA deve ser sempre um campo com 10 caracteres
O valor do saldofatura deve ser entre 0 e 10 ou maior que 10, nunca igual a 0,00



A MINHA IDEIA A PRINCIPIO SERIA CRIAR UMA PACKAGE COM 3/4 PROCEDURES
-LER ARQUIVO E CRIAR TABELA AUXILIAR E POPULAR TABELA
- QUERY 1 E ALIMENTAR RESULTADO EM TABELA TEMPORARIA
- QUERY 2 E ALIMENTAR RESULTADO EM TABELA TEMPORARIA
- UNIR AS DUAS TABELAS TEMPORARIAS COM OS RESULTADOS E DEVOLVER EM UM ARQUIVO TXT E DROPAR AS TABELAS TEMPORARIAS E A TABELA AUXILIAR


LAYOUT FINAL DEVE INCLUIR OS USUARIOS LISTADOS

Selecionar tudo

DATA = SYSDATE
REGIONAL = UF 
N_LOG = DATA CORTE
PLANO_SERVICO = NOME SERVICO  OU CODIGODESCITEMFATURA  OU   CODIGORELACIONAMENTOTABELASERVICO
N_CONTA =CONTA 
TIPO  = TIPOCLIENTE QUANDO HOUVER
PESSOA = IS NULL
ANALISTA = USUARIO
STATUS = IS NULL
COMENTARIO = IS NULL
como entrada deve ter os seguintes arquivos:

Selecionar tudo

CREATE TABLE TABELA AUXILIAR
(NOMESERVICO  VARCHAR2 (50 BYTE),
  CODIGORELACIONAMENTOTABELASERVICO VARCHAR2 (50 BYTE),
 CODIGODESCITEMFATURA VARCHAR2 (50 BYTE))

O QUE ESTA ME COMPLICANDO É COMO VOU ESCREVER A SOLICITACAO DA USUARIA NAS DUAS QUERYS - 1 E 2 POIS não SEI COMO IREI FAZER ISSO - VIA CURSOR, TABELA TEMPORARIA, ETC - A LOGICA...SIMPLESMENTE
não IMAGINO COMO POR NO PAPEL APOS REALIZAR VARIAS TENTATIVAS
alguém POR FAVOR PODERIA ME DAR UM AUXILIO URGENTE
NECESSITO ENTREGAR ISSO EM BREVE E O PRAZO SE ESGOTA EM 15 DIAS
já PEDI PRA RENOVAREM O PRAZO POIS PERDI MUITO TEMPO já QUE ME INFORMARAM QUE A SOLICITACAO DEVERIA SER SOMENTE EM SQL E ESCREVER AS SOLICITACOES QUE ELA PEDIU DINAMICAMENTE não TEM
COMO EXECUTAR EM SQL E SIM EM PLSQL
POR FAVOR PESSOAL NECESSITO DE AUXILIO COM URGENCIA
não CONSIGO PENSAR EM UM PROCEDIMENTO OU UMA LOGICA PRA RESOLVER ISSO E NECESSITO DE UMA ORIENTACAO NA MEDIDA DO POSSIVEL

OBS - DESCULPEM PELA CAIXA ALTA
souldeath
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 48
Registrado em: Qua, 25 Ago 2010 9:39 am
Localização: Limeira

LCA, no caso da leitura do arquivo, ao invés de carregar para tabela temporária você poderia usar uma external table, dessa forma talvez seja possível resolver só usando SQL.

Olha esse exemplo e veja se ele se aplica ao seu caso: http://ravisqlexpert.blogspot.com.br/p/ ... -flat.html
LCA
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 13 Out 2015 12:56 pm

esse exemplo é util mas o melhor seria construir uma package com procedures já que a usuaria pediu que os campos
DATACORTE e o CICLO serão informados pelo usuário quando programar a execução do resultado(DINAMICO) então acredito que o melhor seria fazer uma package com as procedures do processo
com sql somente a limitacao é maior e o trabalho idem. plsql tem mais recursos pra esse caso
LCA
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 13 Out 2015 12:56 pm

alguma ajuda please???
LCA
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 13 Out 2015 12:56 pm

nenhuma sugestao gente? queria uma ideia de como eu poderia implementar o loop da primeira query
é urgente e muito importante que eu entregue essa tarefa concluida
por favor me ajudem
LCA
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 13 Out 2015 12:56 pm

obrigado mesmo pelas dicas pessoal.....rsrsrs
foram de grande valia!!!
LCA
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Ter, 13 Out 2015 12:56 pm

so pra ressaltar pedi dicas pra uns 4 oca/ocp da oracle...caras que se intitulam os bambambans de oracle e quando postei esse problema ai todos eles sequer deram um retorno
isso é gente que tem blog , que usa logo da oracle , etc
se fossem bons mesmo ajudariam quem precisa
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

LCA,

Tudo bem?

Este fórum é um local de troca de idéias/experiências entre pessoas.
A contribuição dos mesmos é voluntária e ninguém recebe por esta contribuição.
Nem sempre as pessoas dispõe de tempo para analisar problemas ou dar uma resposta completa.
Geralmente o pessoal dá uma ou outra dica que ajuda o forista a se encaminhar para uma solução satisfatória.
Lamento que não tenha obtido as respostas que você precisava.
Espero que continue participando do site e contribuindo para sanar dúvidas do pessoal do forum.

Abraços,

Sergio Coutinho
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 13 visitantes