Hola
Estoy probando esta versión alfa/beta jRDC2 de @Oliver A.
https://www.b4x.com/android/forum/t...server-with-stored-procedures-support.123294/
En Oracle me funcionan los comandos:
• Ejecutar la solicitud
• Ejecutar comando
Pero el comando ExecuteCall me da un error cuando trato de usar el parámetro:
"sqlType": "REF_CURSOR"
En Oracle este es el procedimiento almacenado:
[CÓDIGO=sql]CREAR O REEMPLAZAR PROCEDIMIENTO pa_nomusua1(idx en VARCHAR2, rcurx OUT SYS_REFCURSOR) COMO
EMPEZAR
ABRIR rcurx PARA SELECCIONAR nombre DESDE vendedores DONDE vendedor = idx;
--dbms_sql.return_result(rcurx);
FIN;[/CÓDIGO]
El archivo config.properties tiene esta declaración:
[CÓDIGO=b4x]sql.pa_nomusua1=llamar a pa_nomusua1(?,?)[/CÓDIGO]
En el cliente, la subrutina para obtener los datos SYS_REFCURSOR es esta:
Server error message:
ExecuteCall2: Connection supports named parameters = true
Creating CallableStatement
Setting standard parameter value of 1 for index 1
sqlTypeOrdinal = 2012
Registering out parameter index 2, with SQL type: 2012
Executing CallableStatement
CallableStatement returned one or more result sets: false
Output parameter index 2 has value of: oracle.jdbc.driver.ForwardOnlyResultSet@ba0690d
CallableStatement returned 1 OUT parameters
(RuntimeException) java.lang.RuntimeException: Cannot serialize object: oracle.jdbc.driver.ForwardOnlyResultSet@1bc4f159
Command: call: pa_nomusua1, took: 6ms, client=127.0.0.1
Error message on the client:
ResponseError. Reason: java.lang.RuntimeException: Cannot serialize object: oracle.jdbc.driver.ForwardOnlyResultSet@1bc4f159, Response: <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 java.lang.RuntimeException: Cannot serialize object: oracle.jdbc.driver.ForwardOnlyResultSet@1bc4f159</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /rdc. Reason:
<pre> java.lang.RuntimeException: Cannot serialize object: oracle.jdbc.driver.ForwardOnlyResultSet@1bc4f159</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>
</body>
</html>
¿Se incluirán estas subrutinas en la versión original de B4J?
Gracias por sus respuestas.
Estoy probando esta versión alfa/beta jRDC2 de @Oliver A.
https://www.b4x.com/android/forum/t...server-with-stored-procedures-support.123294/
En Oracle me funcionan los comandos:
• Ejecutar la solicitud
• Ejecutar comando
Pero el comando ExecuteCall me da un error cuando trato de usar el parámetro:
"sqlType": "REF_CURSOR"
En Oracle este es el procedimiento almacenado:
[CÓDIGO=sql]CREAR O REEMPLAZAR PROCEDIMIENTO pa_nomusua1(idx en VARCHAR2, rcurx OUT SYS_REFCURSOR) COMO
EMPEZAR
ABRIR rcurx PARA SELECCIONAR nombre DESDE vendedores DONDE vendedor = idx;
--dbms_sql.return_result(rcurx);
FIN;[/CÓDIGO]
El archivo config.properties tiene esta declaración:
[CÓDIGO=b4x]sql.pa_nomusua1=llamar a pa_nomusua1(?,?)[/CÓDIGO]
En el cliente, la subrutina para obtener los datos SYS_REFCURSOR es esta:
B4X:
Sub ObtenerReg3
'
Dim req3 como DBRequestManager = CreateRequest
'
Dim cmd As DBCommand = CreateCommand("pa_nomusua1", _
Array("1",CreateMap("rcurx":"varResponse", "type":"OUT", "sqlType": "REF_CURSOR")))
'
Wait For (req3.ExecuteCall(cmd,0, Null)) JobDone(j3 As HttpJob)
'
If j3.Success Then
Log("Call executed successfully")
req3.HandleCallJobAsync(j3, "req3")
Wait For (req3) req3_CallResult(resultSets As List, parameters As Map)
'Let's print out the returned result sets. resultSets is a list containing 0 or more DBResult objects.
For Each res3 As DBResult In resultSets
req3.PrintTable(res3)
Next
'Let's print the returned OUT parameters
Log($"Parameters map content: ${parameters}"$)
'
Else
Log($"ERROR: ${j3.ErrorMessage}"$)
End If
'
j3.Release
End Sub
Server error message:
ExecuteCall2: Connection supports named parameters = true
Creating CallableStatement
Setting standard parameter value of 1 for index 1
sqlTypeOrdinal = 2012
Registering out parameter index 2, with SQL type: 2012
Executing CallableStatement
CallableStatement returned one or more result sets: false
Output parameter index 2 has value of: oracle.jdbc.driver.ForwardOnlyResultSet@ba0690d
CallableStatement returned 1 OUT parameters
(RuntimeException) java.lang.RuntimeException: Cannot serialize object: oracle.jdbc.driver.ForwardOnlyResultSet@1bc4f159
Command: call: pa_nomusua1, took: 6ms, client=127.0.0.1
Error message on the client:
ResponseError. Reason: java.lang.RuntimeException: Cannot serialize object: oracle.jdbc.driver.ForwardOnlyResultSet@1bc4f159, Response: <html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 java.lang.RuntimeException: Cannot serialize object: oracle.jdbc.driver.ForwardOnlyResultSet@1bc4f159</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /rdc. Reason:
<pre> java.lang.RuntimeException: Cannot serialize object: oracle.jdbc.driver.ForwardOnlyResultSet@1bc4f159</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.4.z-SNAPSHOT</a><hr/>
</body>
</html>
¿Se incluirán estas subrutinas en la versión original de B4J?
Gracias por sus respuestas.
Last edited: