Ir para conteúdo

POWERED BY:

Arquivado

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

Henrique Caldeira

Sintaxe

Recommended Posts

Bom dia, eu preciso pegar o resultado de várias linhas e agrupar em apenas uma linha e uma colina, não quero transformar linhas em colunas. Atualmente trabalho com SQL, e tenho duas rotinas para conseguir o resultado esperado, porém recentemente estou em um cliente e o BD dele é em Oracle e não salva nem um dos meus scripts, alguem poderia me ajudar???

 

Consulta Simples

Declare @var varchar(max)

SELECT @var = Isnull(@var,'') + ',' + NUMEROMOV + ' HENRIQUE ' From TMOV WHERE IDMOV = 128357

SELECT @Var

 

Ja descobri que em Oracle não se usa @ para declarar variaveis, tentei remover, mais não obtive sucesso.

 

Msg de erro ao Salvar:

Imagem Postada

 

 

Consulta usando XML

;WITH COLIGADA AS

(

SELECT

NUMEROMOV,

CAST(YEAR(DATAEMISSAO) AS varchar(10)) AS EMISSAO

FROM

TMOV

WHERE

YEAR (DATAEMISSAO) = 2009

AND MONTH (DATAEMISSAO) = 7

)

 

SELECT (SELECT NUMEROMOV + ', ' + EMISSAO + ' - ' FROM COLIGADA FOR XML PATH('')) AS COLIGADAS

 

Msg de erro ao Salvar:

Imagem Postada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exemplo de um bloco.

 

DECLARE
  VN_COUNT NUMBER;
BEGIN
  SELECT Count(*) INTO VN_Count FROM USER_TABLES;
  Dbms_Output.PUT_LINE(VN_COUNT);
END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Onde você rodou ?

 

Aqui rodou ...

 

eu trabalho com ERP (RM Sistemas), e estou tentando salvar essa consulta no sistema, para utilizar em um relatorio...

 

você conhece alguma forma de juntar valores de linhas em uma linha apenas???

 

EX

PRD QTD

PRD1 4

PRD1 8

PRD1 1

PRD2 5

PRD2 3

 

RETORNO

 

PRD QTD

PRD1 4,8,1

PRD2 5,3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, você poderia me ajudar a adaptar sua Function para o meu problema, no caso sou semi-analfabeto em Oracle

 

Consulta SQL que retorna os valores a serem concatenados:

 

SELECT EE.CODEPI FROM TPRD

JOIN VCATALOGOEPI VCAT ON VCAT.CODCOLIGADA = TPRD.CODCOLIGADA AND VCAT.IDPRD = TPRD.IDPRD

JOIN VHISTEPISEGURANCA HES ON HES.CODCOLIGADA = VCAT.CODCOLIGADA AND HES.CODEPI = VCAT.CODEPI

JOIN VEMPRESTIMOEPI EE ON HES.CODCOLIGADA = EE.CODCOLIGADA AND HES.CODEPI = EE.CODEPI AND EE.CODEPI IS NOT NULL

JOIN VPPRARISCOS R ON HES.CODCOLIGADA = R.CODCOLIGADA AND HES.CODITEMRISCO=R.CODITEMRISCO

WHERE

EE.CODPESSOA = :P_CODPESSOA_S

AND HES.CODITEMRISCO = :ESPELHO#3_S

AND EE.DATAEMPRESTIMO >= :ESPELHO#1_D

AND EE.DATAEMPRESTIMO <= :ESPELHO#2_D

GROUP BY EE.CODEPI

 

Function editada

CREATE OR REPLACE FUNCTION itens( pessoa IN number; codrisco in number; dataini in date; datafim in date)

RETURN VARCHAR2 IS

Cursor c1 is SELECT EE.CODEPI FROM TPRD

JOIN VCATALOGOEPI VCAT ON VCAT.CODCOLIGADA = TPRD.CODCOLIGADA AND VCAT.IDPRD = TPRD.IDPRD

JOIN VHISTEPISEGURANCA HES ON HES.CODCOLIGADA = VCAT.CODCOLIGADA AND HES.CODEPI = VCAT.CODEPI

JOIN VEMPRESTIMOEPI EE ON HES.CODCOLIGADA = EE.CODCOLIGADA AND HES.CODEPI = EE.CODEPI AND EE.CODEPI IS NOT NULL

JOIN VPPRARISCOS R ON HES.CODCOLIGADA = R.CODCOLIGADA AND HES.CODITEMRISCO=R.CODITEMRISCO

WHERE

EE.CODPESSOA = pessoa

AND HES.CODITEMRISCO = codrisco

AND EE.DATAEMPRESTIMO >= dataini

AND EE.DATAEMPRESTIMO <= datafim

GROUP BY EE.CODEPI

;

Saida VARCHAR2(200);

BEGIN

Saida:= ' ';

FOR r1 In c1 LOOP

if length(saida || r1.CODEPI) < 200 then

Saida := saida || r1.CODEPI;

END LOOP;

RETURN TRIM(Saida);

END;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Parece certinha, tem algum problema ?

 

Faça um teste do tipo

 

SELECT itens(12345;1;TO_DATE('01-OCT-2010');TO_DATE('26-OCT-2010')) FROM DUAL

com dados verdadeiros

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.