Chamar função criada no oracle

4,635 views
Skip to first unread message

Allan Eduardo

unread,
Nov 26, 2010, 4:49:34 PM11/26/10
to ColdFusion Brasil
Caros colegas,
Estou desenvolvendo uma aplicação que em determinado momento necessita
fazer cálculo entre duas datas, sendo que esse cálculo tem que trazer
apenas dias úteis. Consegui fazer no oracle uma função que faz esse
cálculo e está certinho, mas estou esbarrando no CF para chamar essa
função. Alguém já teve um problema assim que possa me ajudar?

No oracle chamo a função assim:
FUNC_DIAS_UTEIS(DATA, SYSDATE) AS DIAS
Esse resultado sai perfeito. Quando executo no coldfusion usando a
<cfquery name="dias_uteis">
SELECT FUNC_DIAS_UTEIS(DAT_ENTR_PED, SYSDATE)

FROM TABELA

</cfquery>
me retorna um erro, dizendo que o identificador é inválido.

Abs

Andersen Missiaggia Picorone

unread,
Nov 27, 2010, 5:20:50 AM11/27/10
to cfbr...@googlegroups.com
Olá Allan,
Sem maiores detalhes se é um erro lançado do CF ou do ORACLE, observei
uma coisa que pode estar causando o seu problema. A coluna
DAT_ENTR_PED neste caso tem que ser um campo do tipo DATE da tabela
TABELA, seria bom vc colocar o alias (DIAS) no retorno da função da
sua query. Como sempre coloco alias, não sei se isso causaria algum
problema, pois sem o alias o nome da coluna na query chamaria o mesmo
nome da sua função. Acho que isso poderia causar algum problem no lado
do CF não do Oracle . Caso vc queira passar este parametro como uma
variável de sua pagina vc pode fazer assim:

<cfquery name="dias_uteis">
SELECT
FUNC_DIAS_UTEIS(to_date('#sua_data#'), SYSDATE) DIAS
FROM DUAL
</cfquery>

Se vc tiver maiores detalhes poderia te ajudar mais, como por exemplo:
- Código e descrição completo do erro
- Datatype da coluna DAT_ENTR_PED de sua tabela TABELA
- Assinatura da sua função FUNC_DIAS_UTEIS

abraços


Andersen
http://andersen.eti.br

2010/11/26 Allan Eduardo <allan....@gmail.com>:

> --
> Você recebeu este e-mail pois está cadastrado na lista ColdFusion Brasil
> Para CANCELAR sua assinatura escreva para cfbrasil+u...@googlegroups.com
> Para ASSINAR a lista escreva para cfbrasil+...@googlegroups.com
> O endereço para ENVIO DE MENSAGENS da lista é cfbr...@googlegroups.com
> REGRAS em http://groups.google.com/group/cfbrasil/web/regras-de-boa-convivncia-na-lista
> Outras opções disponíveis em http://groups.google.com/group/cfbrasil
>

Allan Eduardo

unread,
Nov 27, 2010, 6:06:06 AM11/27/10
to ColdFusion Brasil
Andersen
Eu estou fazendo exatamente como vc colocou na sua mensagem. Essa
coluna DAT_ENTR_PED é do tipo DATE, e eu a chamo por um alias DIAS.

Error Executing Database Query. - [Macromedia][Oracle JDBC Driver]
[Oracle]ORA-00904: : invalid identifier

On 27 nov, 08:20, Andersen Missiaggia Picorone <anderse...@gmail.com>
wrote:
> Olá Allan,
> Sem maiores detalhes se é um erro lançado do CF ou do ORACLE, observei
> uma coisa que pode estar causando o seu problema. A coluna
> DAT_ENTR_PED neste caso tem que ser um campo do tipo DATE da tabela
> TABELA, seria bom vc colocar o alias (DIAS) no retorno da função da
> sua query. Como sempre coloco alias, não sei se isso causaria algum
> problema, pois sem o alias o nome da coluna na query chamaria o mesmo
> nome da sua função. Acho que isso poderia causar algum problem no lado
> do CF não do Oracle . Caso vc queira passar este parametro como uma
> variável de sua pagina vc pode fazer assim:
>
>  <cfquery name="dias_uteis">
> SELECT
> FUNC_DIAS_UTEIS(to_date('#sua_data#'), SYSDATE) DIAS
> FROM DUAL
> </cfquery>
>
> Se vc tiver maiores detalhes poderia te ajudar mais, como por exemplo:
> - Código e descrição completo do erro
> - Datatype da coluna DAT_ENTR_PED de sua tabela TABELA
> - Assinatura da sua função FUNC_DIAS_UTEIS
>
> abraços
>
> Andersenhttp://andersen.eti.br
>
> 2010/11/26 Allan Eduardo <allan.barr...@gmail.com>:
>
> > Caros colegas,
> > Estou desenvolvendo uma aplicação que em determinado momento necessita
> > fazer cálculo entre duas datas, sendo que esse cálculo tem que trazer
> > apenas dias úteis. Consegui fazer no oracle uma função que faz esse
> > cálculo e está certinho, mas estou esbarrando no CF para chamar essa
> > função. Alguém já teve um problema assim que possa me ajudar?
>
> > No oracle chamo a função assim:
> > FUNC_DIAS_UTEIS(DATA, SYSDATE) AS DIAS
> > Esse resultado sai perfeito. Quando executo no coldfusion usando a
> > <cfquery name="dias_uteis">
> > SELECT FUNC_DIAS_UTEIS(DAT_ENTR_PED, SYSDATE)
>
> > FROM TABELA
>
> > </cfquery>
> >  me retorna um erro, dizendo que o identificador é inválido.
>
> > Abs
>
> > --
> > Você recebeu este e-mail pois está cadastrado na lista ColdFusion Brasil
> > Para CANCELAR sua assinatura escreva para cfbrasil+u...@googlegroups.com
> > Para ASSINAR a lista escreva para cfbrasil+...@googlegroups.com
> > O endereço para ENVIO DE MENSAGENS da lista é cfbr...@googlegroups.com
> > REGRAS emhttp://groups.google.com/group/cfbrasil/web/regras-de-boa-convivncia-...
> > Outras opções disponíveis emhttp://groups.google.com/group/cfbrasil

Nelson Alves da Silva

unread,
Nov 27, 2010, 3:00:45 PM11/27/10
to cfbr...@googlegroups.com

Boa tarde Allan
 
Se ainda tiver com problemas na chamada da Função de uma olhada no usuario do banco oracle  em que a funcao foi criada.
Nas minhas aplicacoes de CF sempre quando me referencio  a um objeto do Banco coloco o nome do usuario antes.
 
usuario.tabela,  usuario.procedure . . .
 
Abraços
Nelson
 
 

> -----Mensagem Original-----
> De: "Allan Eduardo" <allan....@gmail.com>
> Para: "ColdFusion Brasil" <cfbr...@googlegroups.com>
> Data: 26/11/2010 18:52
> Assunto: [cf-brasil] Chamar função criada no oracle

> --
> Você recebeu este e-mail pois está cadastrado na lista ColdFusion Brasil
> Para CANCELAR sua assinatura escreva para cfbrasil+u...@googlegroups.com
> Para ASSINAR a lista escreva para cfbrasil+...@googlegroups.com
> O endereço para ENVIO DE MENSAGENS da lista é cfbr...@googlegroups.com

Allan Eduardo

unread,
Nov 27, 2010, 2:29:02 PM11/27/10
to ColdFusion Brasil
Nelson,
Será que pode ser mesmo a referencia ao usuário? Falei com o DBA da
empresa, mas ele ainda não me respondeu. De qualquer maneira, se for
esse problema, então eu consigo chamar essa função?

On Nov 27, 6:00 pm, Nelson Alves da Silva <n...@imbil.com.br> wrote:
> Boa tarde Allan
>  
> Se ainda tiver com problemas na chamada da Função de uma olhada no usuario do banco oracle  em que a funcao foi criada.
> Nas minhas aplicacoes de CF sempre quando me referencio  a um objeto do Banco coloco o nome do usuario antes.
>  
> usuario.tabela,  usuario.procedure . . .
>  
> Abraços
> Nelson
>  
>  
>
> > -----Mensagem Original-----
> > De: "Allan Eduardo" <allan.barr...@gmail.com>
> > Para: "ColdFusion Brasil" <cfbr...@googlegroups.com>
> > Data: 26/11/2010 18:52
> > Assunto: [cf-brasil] Chamar função criada no oracle
>
> > Caros colegas,
> > Estou desenvolvendo uma aplicação que em determinado momento necessita
> > fazer cálculo entre duas datas, sendo que esse cálculo tem que trazer
> > apenas dias úteis. Consegui fazer no oracle uma função que faz esse
> > cálculo e está certinho, mas estou esbarrando no CF para chamar essa
> > função. Alguém já teve um problema assim que possa me ajudar?
>
> > No oracle chamo a função assim:
> > FUNC_DIAS_UTEIS(DATA, SYSDATE) AS DIAS
> > Esse resultado sai perfeito. Quando executo no coldfusion usando a
> > <cfquery name="dias_uteis">
> > SELECT FUNC_DIAS_UTEIS(DAT_ENTR_PED, SYSDATE)
>
> > FROM TABELA
>
> > </cfquery>
> > me retorna um erro, dizendo que o identificador é inválido.
>
> > Abs
>
> > --
> > Você recebeu este e-mail pois está cadastrado na lista ColdFusion Brasil
> > Para CANCELAR sua assinatura escreva para cfbrasil+u...@googlegroups.com
> > Para ASSINAR a lista escreva para cfbrasil+...@googlegroups.com
> > O endereço para ENVIO DE MENSAGENS da lista é cfbr...@googlegroups.com

Andersen Missiaggia Picorone

unread,
Nov 27, 2010, 2:44:59 PM11/27/10
to cfbr...@googlegroups.com
Allan,

Tinha pensando nisso tb, mas acabei esquecendo de te escrever. Se vc
estiver usando outro usuario (schema USER_A) que não seja o que que vc
criou a função (schema USER_B), basta logar com o usuário USER_B, dar
o direito de executar a função ao usuário USER_A e usar o schema
USER_B na hora de chamar a função.

Vamos supor que vc criou a função com o usuário USER_B e acessa com
usuário USER_A.
Logue no Oracle com USER_B.
Execute: GRANT EXECUTE ON FUNC_DIAS_UTEIS TO USER_A;
Agora seu select fica assim:

SELECT
USER_B.FUNC_DIAS_UTEIS(DAT_ENTR_PED, SYSDATE) DIAS
FROM TABELA

Espero que isso ajude.

Abraços

Andersen
http://andersen.eti.br

2010/11/27 Allan Eduardo <allan....@gmail.com>:

Nelson Alves da Silva

unread,
Nov 29, 2010, 8:03:49 AM11/29/10
to cfbr...@googlegroups.com

Bom dia Allan
Aqui na minha empresa além dos usuarios padroes do oracle,(system, sys,sysdba) temos mais dois usuarios criados no banco(usuarioA e usuarioB), configuramos apenas um  datasource no administrador do CF com usuarioA.
Bem obviamente no banco oracle o UsuarioA tem seus objetos asim como o usuarioB e   nosso dba no momento de criar esses objetos  da permissao de acesso entre eles(acesso public).  
 
Na minha aplicação qdo preciso acessar objetos do usuarioB coloco o nome do usuarioB antes dos objetos, ex:
 
Acessando uma tabela do usuarioB
  <cfquery name="LstUsuario" datasource="myDatasource">
            select  * from usuarioB.usuarios
           . . .
 </cfquery>
 
ou chamando uma procedure do usuarioB
 
 
        <cfstoredproc datasource="myDatasource" procedure="usuarioB.myProcedure" debug="yes">
            <cfprocparam cfsqltype="cf_sql_varchar"value="#PARAMETRO.A#">
            <cfprocparam cfsqltype="cf_sql_integer"value="#PARAMETRO.B#">
            <cfprocparam cfsqltype="cf_sql_integer"value="#PARAMETRO.C#">
            <cfprocparam cfsqltype="cf_sql_integer"value="#PARAMETRO.D#">
            <cfprocparam cfsqltype="cf_sql_integer"value="#PARAMETRO.E#">
        </cfstoredproc>
Sem mais
Nelson

> -----Mensagem Original-----
> De: "Allan Eduardo" <allan....@gmail.com>
> Para: "ColdFusion Brasil" <cfbr...@googlegroups.com>
> Data: 27/11/2010 16:33
> Assunto: [cf-brasil] Re: Chamar função criada no oracle

Allan Eduardo

unread,
Dec 5, 2010, 8:08:28 AM12/5/10
to ColdFusion Brasil
Caro Andersen,
Obrigado pela colaboração.
Apesar do atraso na resposta,consegui resolver o problema.Era problema
de privilégio no banco que o DBA resolveu. Fato que o amigo já havia
comentado. Vlw

On Nov 27, 8:20 am, Andersen Missiaggia Picorone
<anderse...@gmail.com> wrote:
> Olá Allan,
> Sem maiores detalhes se é um erro lançado do CF ou do ORACLE, observei
> uma coisa que pode estar causando o seu problema. A coluna
> DAT_ENTR_PED neste caso tem que ser um campo do tipo DATE da tabela
> TABELA, seria bom vc colocar o alias (DIAS) no retorno da função da
> sua query. Como sempre coloco alias, não sei se isso causaria algum
> problema, pois sem o alias o nome da coluna na query chamaria o mesmo
> nome da sua função. Acho que isso poderia causar algum problem no lado
> do CF não do Oracle . Caso vc queira passar este parametro como uma
> variável de sua pagina vc pode fazer assim:
>
>  <cfquery name="dias_uteis">
> SELECT
> FUNC_DIAS_UTEIS(to_date('#sua_data#'), SYSDATE) DIAS
> FROM DUAL
> </cfquery>
>
> Se vc tiver maiores detalhes poderia te ajudar mais, como por exemplo:
> - Código e descrição completo do erro
> - Datatype da coluna DAT_ENTR_PED de sua tabela TABELA
> - Assinatura da sua função FUNC_DIAS_UTEIS
>
> abraços
>
> Andersenhttp://andersen.eti.br
>
> 2010/11/26 Allan Eduardo <allan.barr...@gmail.com>:
>
> > Caros colegas,
> > Estou desenvolvendo uma aplicação que em determinado momento necessita
> > fazer cálculo entre duas datas, sendo que esse cálculo tem que trazer
> > apenas dias úteis. Consegui fazer no oracle uma função que faz esse
> > cálculo e está certinho, mas estou esbarrando no CF para chamar essa
> > função. Alguém já teve um problema assim que possa me ajudar?
>
> > No oracle chamo a função assim:
> > FUNC_DIAS_UTEIS(DATA, SYSDATE) AS DIAS
> > Esse resultado sai perfeito. Quando executo no coldfusion usando a
> > <cfquery name="dias_uteis">
> > SELECT FUNC_DIAS_UTEIS(DAT_ENTR_PED, SYSDATE)
>
> > FROM TABELA
>
> > </cfquery>
> >  me retorna um erro, dizendo que o identificador é inválido.
>
> > Abs
>
> > --
> > Você recebeu este e-mail pois está cadastrado na lista ColdFusion Brasil
> > Para CANCELAR sua assinatura escreva para cfbrasil+u...@googlegroups.com
> > Para ASSINAR a lista escreva para cfbrasil+...@googlegroups.com
> > O endereço para ENVIO DE MENSAGENS da lista é cfbr...@googlegroups.com
Reply all
Reply to author
Forward
0 new messages