Fórum Coluna Dinâmica #453665
30/08/2013
0
PROCEDURE PRC_TESTE_RELATORIO(P_COD_LOJA IN NUMBER,
P_COD_PRDUTO IN NUMBER,
P_DMNSAO_TEMPO_INI IN DATE,
P_DMNSAO_TEMPO_FIM IN DATE,
I_CURSOR OUT T_CURSOR)
AS
V_CURSOR T_CURSOR;
V_LENGTH NUMBER;
V_SQL LONG;
CURSOR C1 IS
SELECT COD_LOJA AS LOJA,
COD_PRDUTO AS PRODUTO,
to_char(to_date(COD_DMNSAO_TEMPO, 'rrrrmmdd'), 'DD/MM/RRRR') AS DATA,
QTD_VENDA
FROM B_PRVSAO_VENDA_PRJTDO
WHERE COD_LOJA = P_COD_LOJA
AND COD_PRDUTO = P_COD_PRDUTO
AND COD_DMNSAO_TEMPO >= TO_CHAR(TO_DATE(P_DMNSAO_TEMPO_INI, 'DD/MM/RRRR'),'RRRRMMDD')
AND COD_DMNSAO_TEMPO <= TO_CHAR(TO_DATE(P_DMNSAO_TEMPO_FIM, 'DD/MM/RRRR'),'RRRRMMDD');
begin
V_SQL := 'SELECT DISTINCT A.COD_LOJA,
A.NOM_LOJA,
B.DSC_PROD,';
FOR R1 IN C1 LOOP
V_SQL := V_SQL || R1.QTD_VENDA || ' as ' || '"' || R1.DATA || '"' ||',';
END LOOP;
V_LENGTH := LENGTH(V_SQL);
V_SQL := SUBSTR(V_SQL, 0, V_LENGTH -1);
V_SQL := V_SQL || ' FROM I_LOJA A,
I_PRODUT B,
B_PRVSAO_VENDA_PRJTDO C
WHERE C.COD_LOJA = A.COD_LOJA
AND C.COD_PRDUTO = B.COD_PROD
AND A.COD_LOJA = DECODE('||P_COD_LOJA||', -1, A.COD_LOJA, '||P_COD_LOJA||')
AND B.COD_PROD = DECODE('||P_COD_PRDUTO||', -1, B.COD_PROD, '||P_COD_PRDUTO||')
AND C.COD_DMNSAO_TEMPO >= TO_CHAR(TO_DATE('''||P_DMNSAO_TEMPO_INI||''', ''DD/MM/RRRR''),''RRRRMMDD'')
AND C.COD_DMNSAO_TEMPO <= TO_CHAR(TO_DATE('''||P_DMNSAO_TEMPO_FIM||''', ''DD/MM/RRRR''),''RRRRMMDD'')';
OPEN V_CURSOR FOR V_SQL;
I_CURSOR := V_CURSOR;
EXCEPTION
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20000, 'SP_RT_OCORRENCIAS: ' || SQLERRM);
end PRC_TESTE_RELATORIO;Guilherme Silva
Curtir tópico
+ 0Posts
03/09/2013
Guilherme Silva
PROCEDURE SP_SE_PRVSAO_15_DIAS(P_COD_LOJA IN NUMBER,
P_COD_PRDUTO IN NUMBER,
P_COD_SETOR IN NUMBER,
P_COD_GRUPO IN NUMBER,
P_DATA_INI IN DATE,
P_DATA_FIM IN DATE,
V_BLOB OUT BLOB)
AS
V_XML VARCHAR2(32767);
V_COD_LOJA I_LOJA.COD_LOJA%TYPE;
V_COD_PRDUTO I_PRODUT.COD_PROD%TYPE;
V_COD_SETOR VW_SETOR.COD_SETOR%TYPE;
V_COD_GRUPO VW_GRUPO.COD_GRUPO%TYPE;
V_COD_DMNSAO_TEMPO DATE;
V_CLOB CLOB;
V_DATA_HEADER VARCHAR2(10);
begin
V_XML := '<ROW>';
V_CLOB := '<PRVSAO_VENDAS>';
V_COD_LOJA := -1;
V_COD_PRDUTO := -1;
V_COD_SETOR := -1;
V_COD_GRUPO := -1;
V_COD_DMNSAO_TEMPO := '01/01/1970';
FOR R1 IN (SELECT B.COD_SETOR,
C.COD_GRUPO,
A.COD_LOJA,
C.NOM_LOJA,
A.COD_PRDUTO,
C.DSC_PRDUTO,
B.COD_SISTMT,
A.QTD_VENDA,
TO_CHAR(TO_DATE(A.COD_DMNSAO_TEMPO,'RRRRMMDD'),'DD/MM/RRRR') AS COD_DMNSAO_TEMPO
FROM B_PRVSAO_VENDA_PRJTDO A,
B_LOJA_PRDUTO_FORNEC B,
D_DMNSAO_LOJA_PRDUTO C
WHERE A.COD_LOJA = B.COD_LOJA
AND A.COD_PRDUTO = B.COD_PRDUTO
AND B.COD_LOJA = C.COD_LOJA
AND B.COD_PRDUTO = C.COD_PRDUTO
AND C.COD_GRUPO = DECODE(P_COD_GRUPO, -1, C.COD_GRUPO, P_COD_GRUPO)
AND B.COD_SETOR = DECODE(P_COD_SETOR, -1, B.COD_SETOR, P_COD_SETOR)
AND B.COD_LOJA = DECODE(P_COD_LOJA, -1, B.COD_LOJA, P_COD_LOJA)
AND B.COD_PRDUTO = DECODE(P_COD_PRDUTO, -1, B.COD_PRDUTO, P_COD_PRDUTO)
AND A.COD_DMNSAO_TEMPO >= TO_CHAR(TO_DATE(P_DATA_INI, 'DD/MM/RRRR'),'RRRRMMDD')
AND A.COD_DMNSAO_TEMPO <= TO_CHAR(TO_DATE(P_DATA_FIM, 'DD/MM/RRRR'),'RRRRMMDD')
ORDER BY B.COD_SETOR, C.COD_GRUPO, A.COD_LOJA, A.COD_PRDUTO, COD_DMNSAO_TEMPO) LOOP
IF R1.COD_LOJA = V_COD_LOJA
AND R1.COD_PRDUTO = V_COD_PRDUTO
AND R1.COD_SETOR = V_COD_SETOR
AND R1.COD_GRUPO = V_COD_GRUPO
AND R1.COD_DMNSAO_TEMPO <> V_COD_DMNSAO_TEMPO THEN
V_COD_DMNSAO_TEMPO := R1.COD_DMNSAO_TEMPO;
V_DATA_HEADER := TO_CHAR(V_COD_DMNSAO_TEMPO, 'DDMMRRRR');
V_XML := V_XML || '<D'||V_DATA_HEADER||'>'||R1.QTD_VENDA||'</D'||V_DATA_HEADER||'>';
ELSE
IF V_XML <> '<ROW>' then
V_XML := V_XML || ' </ROW>';
V_CLOB := V_CLOB || V_XML;
V_XML := '<ROW>';
END IF;
V_COD_LOJA := R1.COD_LOJA;
V_COD_PRDUTO := R1.COD_PRDUTO;
V_COD_SETOR := R1.COD_SETOR;
V_COD_GRUPO := R1.COD_GRUPO;
V_COD_DMNSAO_TEMPO := R1.COD_DMNSAO_TEMPO;
V_DATA_HEADER := TO_CHAR(V_COD_DMNSAO_TEMPO, 'DDMMRRRR');
V_XML := V_XML || '<COD_LOJA>'||V_COD_LOJA||'</COD_LOJA>';
V_XML := V_XML || '<COD_PRDUTO>'||V_COD_PRDUTO||'</COD_PRDUTO>';
V_XML := V_XML || '<COD_SETOR>'||V_COD_SETOR||'</COD_SETOR>';
V_XML := V_XML || '<COD_GRUPO>'||V_COD_GRUPO||'</COD_GRUPO>';
V_XML := V_XML || '<D'||V_DATA_HEADER||'>'||R1.QTD_VENDA||'</D'||V_DATA_HEADER||'>';
END IF;
END LOOP;
V_CLOB := V_CLOB || '</PRVSAO_VENDAS>';
V_BLOB := FC_SE_CONVERT_CLOB_BLOB(V_CLOB);
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20000, '[SEM DADOS]');
WHEN OTHERS THEN
RAISE_APPLICATION_ERROR(-20000, 'PG_RELATORIOS.SP_SE_PRVSAO_15_DIAS: ' || SQLERRM);
end SP_SE_PRVSAO_15_DIAS;Gostei + 0
03/09/2013
Guilherme Silva
FUNCTION FC_SE_CONVERT_CLOB_BLOB( c IN CLOB ) RETURN BLOB -- typecasts CLOB to BLOB (binary conversion) IS pos PLS_INTEGER := 1; buffer RAW( 32767 ); res BLOB; lob_len PLS_INTEGER := DBMS_LOB.getLength( c ); BEGIN DBMS_LOB.createTemporary( res, TRUE ); DBMS_LOB.OPEN( res, DBMS_LOB.LOB_ReadWrite ); LOOP buffer := UTL_RAW.cast_to_raw( DBMS_LOB.SUBSTR( c, 16000, pos ) ); IF UTL_RAW.LENGTH( buffer ) > 0 THEN DBMS_LOB.writeAppend( res, UTL_RAW.LENGTH( buffer ), buffer ); END IF; pos := pos + 16000; EXIT WHEN pos > lob_len; END LOOP; RETURN res; -- res is OPEN here END FC_SE_CONVERT_CLOB_BLOB;
Gostei + 0
03/09/2013
José
Gostei + 0
03/09/2013
Guilherme Silva
Gostei + 0
03/09/2013
José
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)