Página 1 de 1
Executar Stored Procedure do Oracle
Enviado: 01 Ago 2008 19:17
por asimoes
Pessoal,
Estou com dificuldade em achar os comandos certos para executar uma stored procedure do oracle, alguém tem algum exemplo? ou onde eu encontro a documentação do ado com relação aos seus comendos exemplo:
oRecordSet:Open() // Quais parâmetros são passados, enfim todos os comandos sql para o ado.
[]´s :)Pos
Re: Executar Stored Procedure do Oracle
Enviado: 02 Ago 2008 11:23
por rodrmigu
Alexandre,
Tente assim:
oRecordSet:Source := "BEGIN credit_account(123, 40); END;"
oRecordSet:Execute()
ou
oRecordSet:CommandText = "BEGIN credit_account(123, 40); END;"
oRecordSet:Execute()
[]'s
Rodrigo
Re: Executar Stored Procedure do Oracle
Enviado: 03 Ago 2008 21:29
por asimoes
Olá Rodrigo,
Obrigado pela dica, vou tentar estes exemplos, qualquer problema retorno aqui.
Outra coisa, o resultado da execução da stored procedure, como é? tem que atribuir para algum vetor?
[]´s
Alexandre
Re: Executar Stored Procedure do Oracle
Enviado: 04 Ago 2008 09:34
por rodrmigu
Olá Alexandre,
Na StoredProcedure, vc precisa usar o retorno na passagem de parametros, como OUT, por isso que prefiro criar a SP como função, daí vc pode mandar o resultado num simples Return.
Naquele link que te passei, tem uns exemplos (meio complicados) de como pegar resultados atraves da passagem de parametros.
[]'s
Rodrigo
Re: Executar Stored Procedure do Oracle
Enviado: 04 Ago 2008 16:11
por asimoes
Rodrigo,
Seguindo o exemplo, está acontecendo um erro que não estou conseguindo resolver:
Código: Selecionar todos
#include "adordd.ch"
PROCEDURE Main()
Local i := 1
Local oConnection := CREATEOBJECT( "adodb.connection" )
Local oRecordset := CREATEOBJECT("adodb.recordset")
? "Connecting..."
oConnection:Open("Provider=OraOLEDB.Oracle;Data Source=DS01;User ID=itbi;Password=itbi;FetchSize=100;CacheType=Memory;PLSQLRSet=1;")
? "Quering..."
oRecordSet:CursorType := adOpenDynamic
oRecordSet:ActiveConnection(oConnection)
//oRecordSet:MaxRecords = 100000
oRecordSet:CacheSize = 100
oRecordSet:Source("BEGIN ITBI.UTIL.BUSCA_UNIFUFIR_RS(to_date('31/01/2008','dd/mm/yyyy'); END;")
oRecordSet:Execute()
RETURN
Me retorna o seguinte erro:
Error adodb.recordset/6 DISP_E_UNKNOWNNAME: EXECUTE Arguments: ()
Error at ...: TOLEAUTO:EXECUTE(0) in Module: source\rtl\win32ole.prg
Called from : MAIN(20) in Module: ORACLE.PRG
Error adodb.recordset/6 DISP_E_UNKNOWNNAME: EXECUTE
Código: Selecionar todos
HbMake v1.20 - xHarbour Make Utility
Copyright (C) 2000-2007 xHarbour project - http://www.xharbour.org
xHarbour build 1.1.0 Intl. (SimpLex) (Rev. 6180) / Borland C++ 5.5.1 (32 bit)
Compiling :
+------------[ 0% ]--------------+
¦ ¦
+----------------------------------+
D:\BORLAND\B+------------------------------------------------------+
Turbo Increm¦ Error adodb.recordset/6 DISP_E_UNKNOWNNAME: EXECUTE ¦
¦ Arguments: () ¦
D:\Harbour\o¦ ¦
¦ Quit ¦
Connecting..+------------------------------------------------------+
Quering...
Error adodb.recordset/6 DISP_E_UNKNOWNNAME: EXECUTE Arguments: ()
Error at ...: TOLEAUTO:EXECUTE(0) in Module: source\rtl\win32ole.prg
Called from : MAIN(20) in Module: ORACLE.PRG
D:\Harbour\oracle>oracle
Connecting...
Quering...
Re: Executar Stored Procedure do Oracle
Enviado: 04 Ago 2008 16:35
por rodrmigu
Alexandre,
Não sei o que está acontecendo, talvez não seja o Execute(), talvez seja algum outro método, precisaria descobrir quais os métodos que podem ser usados com o ADO.
[]'s
ROdrigo
Re: Executar Stored Procedure do Oracle
Enviado: 13 Ago 2008 15:28
por rochinha
Amiguinho
Neste topico eu uso muitos dos metodos do ADO, verifique como usa-los:
viewtopic.php?f=34&t=6772&st=0&sk=t&sd=a&hilit=adoxb
Re: Executar Stored Procedure do Oracle
Enviado: 14 Ago 2008 09:48
por asimoes
Olá Rochinha,
O nosso problema é agora substituir o oraclip (conhece?) para podermos migrar para o xharbour, precisamos encontrar a solução para execução de storeds procedures, onde as regras de negócio estão no banco.
Não achei nada na internet com relação a isso, o nosso amigo Rodrigo me passou alguns exemplos, mas infelizmente não obtive sucesso. Você conhece o SQLRDD? será que ele tem esta funcionalidade para o oracle?
[]´s
Re: Executar Stored Procedure do Oracle
Enviado: 14 Ago 2008 18:32
por sygecom
A SQLRDD é uma LIB paga, pelo SITE deles diz que funciona com ORACLE, mais detalhes entre no site do xharbour.com.br
Re: Executar Stored Procedure do Oracle
Enviado: 15 Ago 2008 13:06
por asimoes
Olá Leonardo,
Eu já baixei o demo da sqllib comercial e não vi nada na documentação, embora diga que o rdd é nativo, mas exemplos, funções para executar um sp não vi.
Alexandre
Re: Executar Stored Procedure do Oracle
Enviado: 15 Ago 2008 15:40
por rodrmigu
Alexandre,
uma outra solução seria testar o odbc da oracle. Eu fiz uns testes com linux e windows usando a TOdbc e gostei do resultado.
Abaixo segue um exemplo que modifiquei e peguei dos testes
[]'s
Rodrigo
Código: Selecionar todos
FUNCTION Main()
LOCAL aOrders
LOCAL nOp
LOCAL dsFunctions
LOCAL cConStr
LOCAL cDir
LOCAL hEnv
//hb_FNameSplit( hb_ArgV( 0 ), @cDir )
//cConStr := "DBQ=" + hb_FNameMerge( cDir, "harbour.mdb" ) + ";Driver={Microsoft Access Driver (*.mdb)}"
dsFunctions := TODBC():New( 'TEST', 'SYSTEM', 'MANAGER' )
SET COLOR TO "W+/B"
CLS
WHILE .T.
@ 00, 00 SAY padc( "þ TODBC Demonstration þ", 80 ) COLOR "B/W"
dsFunctions:SetSQL( "SELECT * FROM dba_users" )
dsFunctions:Open()
@ 03, 24 TO len( dsFunctions:Fields ) + 4, 55
aOrders := {}
FOR i := 1 TO len( dsFunctions:Fields )
aadd( aOrders, dsFunctions:Fields[ i ] :FieldName )
@ i + 3, 25 PROMPT padc( "ORDER BY " + aOrders[ i ], 30 )
NEXT
MENU TO nOp
IF nOp == 0
EXIT
ENDIF
dsFunctions:Close()
dsFunctions:SetSQL( "SELECT * FROM dba_users ORDER BY " + aOrders[ nOp ] )
dsFunctions:Open()
FOR i := 11 TO 24
@ i, 00 SAY REPL( " ", 80 )
NEXT
@ 10, 00 TO 10, 79
@ 24, 00 TO 24, 79
@ 12, 00 TO 12, 79
@ 11, 00 SAY ""
@ 11, 02 SAY "Statement:" COLOR "GR+/B"
@ 11, col() + 1 SAY dsFunctions:cSQL
@ 14, 05 SAY " " + padr( dsFunctions:FieldByName( "username" ) :FieldName, 3 ) + " " + ;
padr( dsFunctions:FieldByName( "password" ) :FieldName, 15 ) + " " + ;
padr( dsFunctions:FieldByName( "account_status" ) :FieldName, 2 ) + " " + ;
padr( dsFunctions:FieldByName( "default_tablespace" ) :FieldName, 40 ) ;
COLOR "B/W"
WHILE !dsFunctions:Eof()
? " " + padr( dsFunctions:FieldByName( "username" ) :Value, 3 ), "³", ;
padr( dsFunctions:FieldByName( "password" ) :Value, 15 ), "³", ;
padr( dsFunctions:FieldByName( "account_status" ) :Value, 2 ), "³", ;
padr( dsFunctions:FieldByName( "default_tablespace" ) :Value, 40 )
dsFunctions:Skip()
ENDDO
dsFunctions:Close()
ENDDO
dsFunctions:Destroy()
RETURN ( NIL )