Ir para conteúdo

POWERED BY:

Arquivado

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

Junior_Cassapava

Array na procedure?

Recommended Posts

Boa tarde a todos!

 

Pessoal, tenho uma dúvida, estou trabalhando com uma transação onde faço um sql e retorno um valor.. a sentença fica assim: (exemplo):

 

DECLARE var_teste VARCHAR(100);

SELECT nm_teste FROM prteste LIMIT 1 INTO @var_teste;

Até aqui tudo ok.. retornando apenas 1 valor isso funciona perfeitamente.. mas como faço para que essa variavel tenha vários valores??

 

Tentei da seguinte forma:

 

DECLARE var_teste VARCHAR(100);
DECLARE var_array TEXT();

FOR 
	SELECT nm_teste FROM prteste LIMIT 1 INTO @var_teste;
DO 
BEGIN

@var_array = @var_array + @var_teste;

END

Tentei dessa maneira mas não obti sucesso.

 

Se não estou errado, o que está dentro do BEGIN irá rodar a quantidade de colunas que existirem no meu FOR SELECT.. (se eu estiver errado favor corrijam-me)

 

Eu preciso de uma variavel que contenha todos os valores da coluna.. quero fazer um select com a clásula IN e os valores da variavel.

 

Se alguém puder ajudar agradeço.

 

Desde já grato pela atenção.

Abraço a todos.

 

Att

Junior

Compartilhar este post


Link para o post
Compartilhar em outros sites

SELECT nm_teste FROM prteste LIMIT 1 INTO @var_teste;

essa tua consulta vai retornar sempre o mesmo resultado

 

se tu fizer assim, não funciona?

SELECT nm_teste FROM prteste INTO @var_teste;

 

ou faz usando um cursor

Compartilhar este post


Link para o post
Compartilhar em outros sites

de qualquer forma você vai ter que trocar esse select, pois ele está trazendo sempre o mesmo valor

achei um exemplo de cursor para mysql

CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE a CHAR(16);
  DECLARE b,c INT;
  DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
  DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

  OPEN cur1;
  OPEN cur2;

  REPEAT
	FETCH cur1 INTO a, b;
	FETCH cur2 INTO c;
	IF NOT done THEN
	   IF b < c THEN
		  INSERT INTO test.t3 VALUES (a,b);
	   ELSE
		  INSERT INTO test.t3 VALUES (a,c);
	   END IF;
	END IF;
  UNTIL done END REPEAT;

  CLOSE cur1;
  CLOSE cur2;
END

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa tarde Junior, fiz essa proc q retorna um array de ids na procedure.

 

CREATE PROCEDURE [dbo].[GetUnlinkConnexionPointDataTable]

(

@EntityId varchar(2000)

)

AS

BEGIN

SET NOCOUNT ON;

Declare @SQL varchar(Max)

Set @SQL =

'SELECT

CNP.ID

,CNP.ConsumptionCustomerName as CUSTOMERNAME

,E.ShortName AS SERVICESUPPLIERNAME

,SS.SERVICEID

,S.Name AS SERVICEDESC

,CNP.ConnexionPointSupplierFirstKey AS SUPPLIERFIRSTKEY

,CNP.ConnexionPointSupplierSecondKey AS SUPPLIERSECONDKEY

,CNP.ConsumptionCustomerAddress AS CUSTOMERADDRESS

,CNP.INACTIVEREASON AS INACTIVEREASON

FROM

[dbo].[ConnexionPoint] (nolock) CNP

join [dbo].ServiceSupplier (nolock) SS on ss.Id = cnp.ServiceSupplierId

join [dbo].[service] S (nolock) on S.Id = SS.ServiceId

join [dbo].EntityView (nolock) E on E.Id = SS.EntityId

WHERE CNP.[EntityConsumerId] in(' + @EntityId + ') AND CNP.Status = 1';

 

exec (@SQL)

 

END

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.