none
GetDate em function não funciona RRS feed

  • Pergunta

  • Pessoal,

    Estou criando uma function (SQL 2000) e dentro dessa function preciso utilizar a função GetDate() que simplesmente retorna o seguinte erro:

    Invalid use of 'getdate' within a function.

    Pensei então em colocar o nome do criador na frente tipo dbo.GetDate() porém me retorna outro erro porém somente quando vou executar o erro retornado é:

    Invalid object name 'dbo.getdate'.

    Por que ocorre esse erro?

    O código da function de exemplo segue abaixo:

    create Function teste
    (
    )
    Returns datetime
    As
    Begin
        Return dbo.getdate()
    End
    segunda-feira, 10 de dezembro de 2007 18:53

Respostas

  •  

    Roberto,

     

    Não podemos usar funções não-determinísticas dentro de funções. E a GETDATE é uma delas.

     

    Uma opção que geralmente uso nesses casos é passar a data como parâmetro!

     

    Exemplo:

     

    CREATE FUNCTION dbo.fnTeste (@data datetime)

    RETURNS datetime

    AS

    BEGIN

    RETURN @Data

    END

     

     

     

    E a Chamada seria assim:

     

    SELECT dbo.fnTeste (GETDATE())

     

     

     

    Claro, este é apenas um exemplo. Não faria sentido passar uma data só para retornar ela novamente.

     

     

    Abraço

    segunda-feira, 10 de dezembro de 2007 19:00

Todas as Respostas

  •  

    Roberto,

     

    Não podemos usar funções não-determinísticas dentro de funções. E a GETDATE é uma delas.

     

    Uma opção que geralmente uso nesses casos é passar a data como parâmetro!

     

    Exemplo:

     

    CREATE FUNCTION dbo.fnTeste (@data datetime)

    RETURNS datetime

    AS

    BEGIN

    RETURN @Data

    END

     

     

     

    E a Chamada seria assim:

     

    SELECT dbo.fnTeste (GETDATE())

     

     

     

    Claro, este é apenas um exemplo. Não faria sentido passar uma data só para retornar ela novamente.

     

     

    Abraço

    segunda-feira, 10 de dezembro de 2007 19:00
  • Roberto,

     

    O Alexandre, esta certo, na verdade não é permitido utilizar funções que possuem um retorno determinado de informações, agora o exemplo que ele postou com certeza vai resolver o seu problema.

     

    Mas, gostaria de saber porque criar uma função que vai retornar o valor da function GetDate(), sendo que, já existe uma função para isso?

     

    Neste seu exemplo você esta utilizando uma função scalar!!!

    segunda-feira, 10 de dezembro de 2007 19:37
  • Muito obrigado Alexandre.

    Junior,

    Só passei como exemplo na verdade eu seleciono um valor (datetime) no banco realizo algumas verificações (dias da semana, período etc) e retorno a quantidade de dias de diferença (utilizando função DateDiff) da data atual (GetDate) em relação a data calculada. O exemplo que postei foi somente para visualizar o problema.

    Muito obrigado e irei fazer dessa maneira, pois só me deparei com esse erro no SQL 2000 já no SQL 2005 não ocorre os erros citados. Acho que é limitação do 2000
    segunda-feira, 10 de dezembro de 2007 19:51
  •  

    Olha, não sei se podemos considerar como limitação do 2000 ou nova implementação no 2005, hehe.

     

    Bom que vai resolver seu problema.

     

     

    Qualquer coisa estamos aqui.

     

     

    Abraço

    segunda-feira, 10 de dezembro de 2007 19:58
  • Alexandre,

     

    Prefiro descrever como uma implementação no SQL Server 2005.

     

    terça-feira, 11 de dezembro de 2007 16:29
  •  

    Pois é... soa melhor né, hehe.
    terça-feira, 11 de dezembro de 2007 16:46
  • Alexandre,

     

    Assim realmente fica melhor!!!

    terça-feira, 11 de dezembro de 2007 16:57
  • Eu prefiro descrever como limitação, já que isso seria perfeitamente possível de implementação caso tivessem pensado no assunto, porém em curvo a vocês e direi que é uma implementação. kkkkkkkkk

    Muito obrigado de qualquer forma
    terça-feira, 11 de dezembro de 2007 19:40