Newsgroup: it.comp.appl.access
Titolo: ricevere dato da query su oracle

devo lanciare una procedura oracle e riceverne il risultato in una forma 
utilizzabile da access.
la sintassi che m'hanno detto di usare è questa:
call nomefunzione(variabilediritorno)
il tutto da mettere in una query pass through (o almeno questa è a 
soluzione più semplice che m'è venuta in mente...).
se lancio una funzione che non restituisce nulla, nessun problema, tutto va 
a buon fine e i dati vengono modificati come previsto.
se invece oltre a eseguire modifiche, devo ricevere dei dati (il risultato 
dell'operazione), non so come fare...
mi sapete dare qualche dritta?
tia
    	paolo
-- 
+-------
| Paolo opg
|
| janickg ( at ) hotmail ( dot ) com
+-------
** Articolo inviato tramite i servizi gratuiti di 
www.x-privat.org
 **


Giuro che non ho afferrato ciò che devi fare, ma se ho almeno capito
un pezzetto è certo che con una QRY_PassTrough non aggiorni molto
poichè restituisce un Recordset in Sola Lettura.
In ogni caso se devi ricevere dei dati creati un Recordset e se hai A_XP
sfrutta la proprietà Recordset di Form :
Set Me.Recordset=Rs_Qry
Me.Requery.
Porta pazienza, magari ti ho detto cose che non anno nulla a che fare
con ciò che hai chiesto, ma non ho l'aria condizionata e il mio livello
già basso si è appiattito-
@Alex.

 
cercherò di spiegarmi un pò meglio...
il caldo non concilia nemmeno chi deve scrivere, non solo che legge!
:-)
come anche sql server, oracle permette di definire funzioni sul server 
richiamabili dai client.
queste funzioni, sono delle vere e proprie procedure, routines o comunque 
un insieme di ricghe di codice (sql, solitamente) che eseguono una serie 
di operazioni sui dati gestiti dal server.
queste funzioni, possono restituire dati in diverse forme:
-recordset
-singoli valori
-niente del tutto
esattamente come succede con delle normali funzioni in qualsiasi 
linguaggio di programmazione.
nel mio caso, la funzione non deve ricevere parametri, deve solo eseguire 
una serie predeterminata e fissa di aggiornamenti su alcuni dati.
deve però restituirmi un valore che mi dica se ci sono stati errori 
durante questa procedura.
io non ho quindi un set di record, come risultato di questa esecuzione, 
ho semplicemente un valore boolean che mi dice se l'aggiornamento è 
andato oppure no.
quello che non so fare, è come dire a 'sta cacchio di funzione oracle che 
voglio il dato nella tal variabile, dato che la funzione la chiamo in 
questa maniera:
currentdb.execute "call funzione(varDiRitorno)", sqlPassThrough
la sintassi tra virgolette, ovviamente, è imposta da oracle e non posso 
cambiarla.
spero di essere stato più chiaro, stavolta.



Ciao Paolo
Per ricevere i dati da una fonte ODBC devi creare un recordset.
Ti posto un esempio di chiamata a una funzione su SqlServer che ritorna un
valore, con le dovute modifiche devrebbe funzionare anche per oracle
----------------------------------
Dim wrk As Workspace
Dim Conn As DAO.Connection
Dim Rs As DAO.Recordset
'Creo il WorkSpace ODBC
Set wrk = CreateWorkspace("", "Admin", "", dbUseODBC)
'Apro la connessione al server
Set Conn = wrk.OpenConnection("Conn", dbDriverCompleteRequired,  , _
      "ODBC;DRIVER=Sql
Server;Server=(local);DATABASE=Prova;UID=sa;PWD=sa;DSN=;")
'Eseguo la funzione
Set Rs = Conn.OpenRecordset("Select dbo.ufn_funzione()", , dbSQLPassThrough)
'Stampo l'unico fields del recordset in cui č contenuto il valore di ritorno
Debug.Print Rs.Fields(0)
'Pulizia
Rs.Close
Set Rs = Nothing
Conn.Close
Set Conn = Nothing
Set wrk = Nothing
-------------------
Ciao Giorgio.

 
questo sistema lo uso anche io, con i server normali...
:-)
con oracle DEVO usare questa sintassi:
call nomefunzione(varInCuiMettereIlRisultato)
e io non so come fare a specificare in una stringa sql da passare al 
server, il nome di una variabile locale di access...
se qualcuno è a conoscenza del metodo, a me andrebbe bene anche 
ricondurmi al caso normale, dove la funzione restituisce un recordset.
solo che io non sono esperto di oracle e chi lo gestisce dal cliente mi 
ha detto di usare il metodo segnato qui sopra...


 ha scritto nel messaggio
news:Xns93A6DC305...@192.168.13.20...

Ciao Andrea
Nel mio esempio la funzione non ritorna nessun recordset ma un valore int
che viene restituito in forma di recordset tramite la SELECT.
Non esiste nessun modo per far memorizzare in una variabile locale di VBA
un qualcosa che lavora su un'altra macchina, inoltre call
nomefunzione(varInCuiMettereIlRisultato)  non sembra proprio una funzione
"y=f(x)" ma una Stored Procedure.
Comunque fermo restando che l'unico mezzo di comunicazione è il recordset
(come da mio esempio) dovresti inserire nell'origine record qualcosa del
tipo...
--------------
DECLARE @varInCuiMettereIlRisultato int
call nomefunzione(@varInCuiMettereIlRisultato)
Select @varInCuiMettereIlRisultato
--------------
In questo modo nel field del recordset ti ritrovi il valore di ritorno, ma
questo è un problema puramente di sintassi SQL di Oracle e se non lo conosci
penso ti convenga porre il quesito su un Ng apposito.
Ciao Giorgio.

 news:bdfgbj$rfi$
1...@lacerta.tiscalinet.it
:
Chissà perchè ho messo Andrea  e non Paolo
Ma!!
Comunque un Ng su cui puoi chiedere chiarimenti su PL/SQL è
it.comp.software.database
Ciao

 --------------
questa la provo.
non ho mai usato sp, quindi non sapevo neanche si potesse fare...
grazie della dritta!
tnx


 ha scritto nel messaggio
news:Xns93A7D8DF...@151.99.250.3...

Ciao Paolo
Si può fare ma la sintassi della dichiarazione di variabile l'ho inventata
al momento ispirandomi a TSql che utilizza il simbolo @ , simbolo che PL/Sql
non utilizza. Dai uno sguardo a questo link c'e il reference di Oracle 9.2
http://www.csis.gvsu.edu/GeneralInfo/Oracle/server.920/a96540/toc.htm
Come pensavo quella che utilizzi è una stored procedure in quanto le
funzioni hanno la stessa struttura di TSql.
es..
Definizione di una funzione in PL/Sql
----------------
CREATE FUNCTION get_bal(acc_no IN NUMBER)
   RETURN NUMBER
   IS acc_bal NUMBER(11,2);
 BEGIN
 SELECT order_total
 INTO acc_bal
 FROM orders
 WHERE customer_id = acc_no;
 RETURN(acc_bal);
 END;
---------------
Utilizzo della funzione
---------------------
SELECT get_bal(165) FROM DUAL;
Risultato
GET_BAL(165)
------------
        2519
Ciao Giorgio.