none
Função RRS feed

  • Pergunta

  •  

    Galera estou precisando fazer uma função e retornar os dados do meu select:

     

    CREATE FUNCTION [dbo].[fu_bo_positontype]

    (

    @stockid varchar(10),

    @Carrying varchar(15)

    )

    RETURNS varchar(15)

    AS

    BEGIN

    RETURN SELECT

    CASE bc.LoanTypeId

    WHEN 1

    THEN

    CONVERT(varchar(15), CONVERT(int, SUM(AMOUNT))) + ' - ' + 'SL'

    WHEN 2

    THEN

    CONVERT(varchar(15), CONVERT(int, SUM(AMOUNT))) + ' - ' + 'SB'

    ELSE

    '-'

    END AS POTYPSH

    FROM BlotterContract AS BC

    LEFT JOIN BlotterLoanType AS BLT ON

    bc.LoanTypeId = blt.id

    WHERE bc.Stock = 'ABNB3'

    GROUP BY

    BC.STOCK,

    bc.LoanTypeId

    END

     

    Só que está me retornando o seguinte erro:

     

    RETURN statements in scalar valued functions must include an argument.

     

    Não entendi o pq

     

    Obrigado

     

    sexta-feira, 5 de dezembro de 2008 17:55

Todas as Respostas

  • Boa Tarde SirSmart,

     

    Ficaria da seguinte forma:

     

    Code Snippet
    CREATE FUNCTION [dbo].[fu_bo_positontype]
    (
    @stockid varchar(10),
    @Carrying varchar(15)
    )
    RETURNS TABLE AS
    RETURN (
    SELECT
    CASE bc.LoanTypeId
    WHEN 1
    THEN
    CONVERT(varchar(15), CONVERT(int, SUM(AMOUNT))) + ' - ' + 'SL'
    WHEN 2
    THEN
    CONVERT(varchar(15), CONVERT(int, SUM(AMOUNT))) + ' - ' + 'SB'
    ELSE
    '-'
    END AS POTYPSH
    FROM BlotterContract AS BC
    LEFT JOIN BlotterLoanType AS BLT ON
    bc.LoanTypeId = blt.id
    WHERE bc.Stock = 'ABNB3'
    GROUP BY
    BC.STOCK,
    bc.LoanTypeId)

     

     

     

    Em todo caso, não entendi porque essa função tem dois parâmetros que não são usados no SELECT.

     

    [ ]s,

     

    Gustavo

     

    sexta-feira, 5 de dezembro de 2008 18:07
  • Cara funcionou, agora estou executando essa função dentro de um select, mas está me retornando  o seguinte erro:

     

    Cannot find either column "dbo" or the user-defined function or aggregate "dbo.fu_bo_positontype", or the name is ambiguous.

     

    O que pode ser?

     

    Obrigado

     

     

    sexta-feira, 5 de dezembro de 2008 18:23
  • Olá SirSmart,

     

    Você pode postar o código que está gerando o erro ?

     

    [ ]s,

     

    Gustavo

     

    sexta-feira, 5 de dezembro de 2008 19:00
  • Eis o código

     

    DECLARE

    @SecurityIDType AS CHAR(1),

    @ContryIncorp AS CHAR(2),

    @CountryList AS CHAR(2),

    @FidPosition AS CHAR(1),

    @dtOperation AS VARCHAR(8),

    @StockID AS VARCHAR(15)

    SET @SecurityIDType = 'I';

    SET @ContryIncorp = 'BR';

    SET @CountryList = 'BR';

    SET @FidPosition = 'N';

    SET @dtOperation = '20081202';

    -- Ativos na carteira

    SELECT

    stock.Stockid,

    Stock.Available,

    stock.AccountId AS Carrying,

    enti.Name,

    @SecurityIDType AS SecurityIDType,

    @ContryIncorp AS ContryIncorp,

    @CountryList AS CountryList,

    @FidPosition AS FidPosition,

    --Função retorna os campos positon type e shares held

    Code Snippet
    dbo
    .fu_bo_positontype(stock.Stockid,stock.AccountId ) as PostionTypeSharesHeld,

     

     

    -- Função que retorna os tipos dos contratos

    CASE dbo.fu_bo_stockcode(stock.Stockid)

    WHEN 'ON'

    THEN '0'

    ELSE

    'PS'

    END AS SecType

    -- Cria tabela temporaria e inclui os dados

    INTO #teste

    FROM Account AS acc

    LEFT JOIN Entity AS enti ON

    acc.EntityId = enti.id

    LEFT JOIN StockShare AS stock ON

    stock.AccountId = acc.id

    LEFT JOIN company AS comp ON

    comp.id = stock.Stockid

    WHERE stock.date = @dtOperation

    GROUP BY stock.Stockid,

    stock.Available,

    stock.AccountId,

    enti.Name

    select * from #teste;

     

     

    Obrigado
    sexta-feira, 5 de dezembro de 2008 21:57
  • Olá SirSmart,

     

    Apenas por curiosidade. Tente o seguinte:

     

    Code Snippet

    CASE WHEN dbo.fu_bo_stockcode(stock.Stockid) = 'ON' THEN '0'

    ELSE 'PS' END AS SecType

     

     

     

    [ ]s,

     

    Gustavo

    sexta-feira, 5 de dezembro de 2008 22:17
  • Me retornou esse erro:

     

    Cannot find either column "dbo" or the user-defined function or aggregate "dbo.fu_bo_positontype", or the name is ambiguous.

    Abraço

    sexta-feira, 5 de dezembro de 2008 22:43
  • Cara descobri, só consigo fazer funcionar desta forma:

     

    select * from dbo.fu_bo_positontype('abcd3',2323 )

     

    Acho que é pq nós criamos um retorno como tabela.

     

    Tem como eu jogar o retornno em uma variavel, ou eu tenho que mudar a função para poder fazer isso?

     

    Obrigado

    sábado, 6 de dezembro de 2008 00:26