2015-04-07 2 views
0

Прежде всего, я из Аргентины, извините за плохой английский!Вызов функции Oracle с параметрами с VB.NET

Я работаю в visual.net 2010, и я пытаюсь сделать вызов функции в пакете Oracle, но я получаю эту ошибку:

PLS-00306: неправильный номер или типов аргументов в вызове 'FN_FINDPRONOSTICO'

Это определение пакета:

create or replace 
PACKAGE PKG_HOME AS 

    TYPE CR_ESTACIONREFERENCIA IS REF CURSOR; 
    TYPE CR_PRONOSTICO IS REF CURSOR; 
    TYPE CR_ALERTA IS REF CURSOR; 
    TYPE CR_ESTADIOSPREDOMINANTESZONA IS REF CURSOR; 
    TYPE CR_VARIEDADES IS REF CURSOR; 

    --FUNCTIONS 

    FUNCTION FN_FINDESTACIONREFERENCIA(PR_IDZONAFENO IN NUMERIC) RETURN CR_ESTACIONREFERENCIA; 
    FUNCTION FN_FINDPRONOSTICO(PR_IDESTACION IN NUMERIC) RETURN CR_PRONOSTICO; 
    FUNCTION FN_FINDALERTAMETEO(PR_IDESTACION IN NUMERIC) RETURN CR_ALERTA; 
    FUNCTION FN_FINDALERTAPLAGA(PR_IDZONAFENO IN NUMERIC) RETURN CR_ALERTA; 
    FUNCTION FN_FINDALERTAENFERMEDAD(PR_IDZONAFENO IN NUMERIC) RETURN CR_ALERTA; 

    PROCEDURE SP_ESTFENOPREDZONAVAR(pFechaDesde IN DATE, pFechaHasta IN DATE,pIdZona IN NUMBER ,pIdVariedad IN NUMBER); 

    FUNCTION FN_ESTADIOSFENOPREDZONA(pIdZona IN NUMBER) RETURN CR_ESTADIOSPREDOMINANTESZONA; 
END; 

И это код в VB.NET

Dim cmd As New OracleCommand("FRUTIC.PKG_HOME.FN_FINDPRONOSTICO", OraConn) 
cmd.CommandType = CommandType.StoredProcedure 
cmd.BindByName = True 

Dim oparam0 As OracleParameter = cmd.Parameters.Add("PR_IDESTACION", OracleDbType.Int64) 
oparam0.Value = 65 
oparam0.Direction = ParameterDirection.Input 

Dim oparam1 As OracleParameter = cmd.Parameters.Add("CR_PRONOSTICO", OracleDbType.RefCursor) 
oparam1.Direction = ParameterDirection.Output 

Dim reader As OracleDataReader 
reader = cmd.ExecuteReader() 

Do While reader.Read() 
    Dim obj As Object 

    obj = reader.GetValue(0) 
Loop 

Если я запустил этот оператор SQL (SELECT FRUTIC.PKG_HOME.FN_FINDPRONOSTICO (65) FROM DUAL) в Oracle SQL Developer, он вернет результаты правильно.

Где может быть проблема?

спасибо, что заблаговременно! Привет из Аргентины, Лукас

ответ

0

Это неправильно:

Dim oparam1 As OracleParameter = cmd.Parameters.Add("CR_PRONOSTICO", OracleDbType.RefCursor) 
oparam1.Direction = ParameterDirection.Output 

Должно быть это:

Dim oparam1 As OracleParameter = cmd.Parameters.Add("CR_PRONOSTICO", OracleDbType.RefCursor) 
oparam1.Direction = ParameterDirection.ReturnValue 
+0

Вы стреляете первым :) – Caveman

+0

Это именно то, что я искал, он отлично работал! Большое спасибо! –

0

Может быть, вы должны использовать "ReturnValue" вместо "Выход". Сделайте это:

Dim oparam0 As OracleParameter = cmd.Parameters.Add("PR_IDESTACION", OracleDbType.Int64) 
oparam0.Value = 65 
oparam0.Direction = ParameterDirection.Input 

Dim oparam1 As OracleParameter = cmd.Parameters.Add("CR_PRONOSTICO", OracleDbType.RefCursor) 
oparam1.Direction = ParameterDirection.**ReturnValue** 
+0

Спасибо вам тоже! Это был правильный ответ! Приветствую! –

+0

De nada hombre! Por 15 segundos !! jajaja – Caveman

+0

Jajajajaja! El teclado más rápido del oeste! Saludos, que estés bien! :) –