Stored Procedures

Boa tarde, gostaria de saber se há possibilidade de usar o retorno de uma stored procedure como lookup de um campo. Obrigado.

PS: Em varias tentativas/pesquisas nao obtive resultados, uma delas foi:

A Procedure:

DELIMITER;;
CREATE PROCEDURE totalCotacao(IN ID int(10) unsigned, OUT TOTAL double)
SELECT (SUM(cci.valor*coi.quantidade)+cc.valor_frete) INTO TOTAL
FROM compras_cotacoes_itens cci
INNER JOIN compras_cotacoes cc ON cc.id=cci.compras_cotacao_id
INNER JOIN compras_ordens_itens coi ON cci.compras_ordem_item_id=coi.id
WHERE cc.id=ID
;;DELIMITER

Lookup do campo:
CALL totalCotacao({id_cotacao},@‘total’);

Sugestões são bem vindas

Carlos,

Nesse caso você terá que utilizar functions, pois as stored procedures não retornarão NADA.

T+

Voce pode fazer a SP gravar uma tabela, e com o sc_lookup acessar essa tabela normalmente.
Pode ainda passar com o parametro um nome de tabela temporaria a ser criada pela SP e depois dropa-la.

Carlos,

Levando-se em conta que sua query está correta (não analisei!), você teria uma função ± assim:

CREATE FUNCTION totalCotacao(ID int(11) ) RETURNS double CHARSET latin1
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE TOTAL double DEFAULT 0;
DECLARE pesquisa1 CURSOR FOR
SELECT (SUM(cci.valor*coi.quantidade)+cc.valor_frete) INTO TOTAL
FROM compras_cotacoes_itens cci
INNER JOIN compras_cotacoes cc ON cc.id=cci.compras_cotacao_id
INNER JOIN compras_ordens_itens coi ON cci.compras_ordem_item_id=coi.id
WHERE cc.id=ID;
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET done = 1;
OPEN pesquisa1;
REPEAT
FETCH pesquisa1 INTO TOTAL ;
UNTIL done END REPEAT;
CLOSE pesquisa1;
RETURN TOTAL;
END$$

Lookup do campo:
SELECT totalCotacao({id_cotacao});

T+

neste caso em específico, porque não usar o lookup direto no select?

$_ID=123;
$_sql=“SELECT (SUM(cci.valor*coi.quantidade)+cc.valor_frete) INTO TOTAL
FROM compras_cotacoes_itens cci
INNER JOIN compras_cotacoes cc ON cc.id=cci.compras_cotacao_id
INNER JOIN compras_ordens_itens coi ON cci.compras_ordem_item_id=coi.id
WHERE cc.id=$ID”;
sc_lookup(ds,$_sql);

Pois na sua stored procedure não manipula os dados é apenas um select.

SDHPU,

Também não vejo nenhuma necessidade de uma função/procedure para uma query deste tipo… não faz muito sentido, pelo menos não tem nada especial nela que justifique-a…

T+

@jovitomelo e @Haroldo, obrigado pelas respostas.

Obrigado pelas sugestões e a ideia da function pode funcionar… ou até mesmo a utilização do código interno da procedure…

Vou reavaliar aqui a necessidade