2013-06-10 3 views
1

문자열을 반환하는 매개 변수없이 Testing이라는 간단한 Oracle 함수를 작성했습니다.Oracle 함수 호출 .NET에서 저장 프로 시저

System.Data.OracleClient.OracleException :

ORA-06550: line 1, column 7:" "PLS-00221: 'TESTING2' is not a procedure or is undefined".

내가 할 "이중에서 테스트()를 선택합니다"로 변경하면 내 .NET 응용 프로그램에서 호출 할 때 오류가 발생합니다 CommandType을 Text로 변경하면 작동합니다. 내가 뭘 놓치고 있니?

Dim oracleConn As OracleConnection = CreateConnection(<connection info here>) 

    Dim oracleCmd As New OracleCommand() 
    oracleCmd.Connection = oracleConn 
    'oracleCmd.CommandText = "SELECT TESTING2() FROM DUAL" 'this works 
    oracleCmd.CommandText = "TESTING2" 'this does not work 

    oracleCmd.CommandType = CommandType.StoredProcedure 

    'oracleCmd.ExecuteReader() 'also tried this 
    Dim tmpVar As String = oracleCmd.ExecuteScalar() 

create or replace FUNCTION testing2 
RETURN VARCHAR2 
AS  
begin 
    return 'hello'; 
end; 
+0

당신은 오라클 서버에 로그온하는 데 사용하는 사용자에 대해 해당 sproc에 대한 실행 권한을 부여 했습니까? 당신은 패키지 안에 sproc을 정의 했나요? – codingadventures

+0

내 사용자에게 할당 된 모든 역할에 대해 보조금을 실행했습니다. 함수의 일부를 패키지의 일부로 호출하려고했지만 동일한 오류가 발생했습니다. – Kelly

답변

1

난 더 이상 오라클과 함께 작동하지 않습니다, 그래서 지금 테스트 할 수 있지만,이 예제

Dim oracleConn As OracleConnection = CreateConnection(<connection info here>) 
Dim oracleCmd As New OracleCommand() 
oracleCmd.Connection = oracleConn 
oracleCmd.CommandText = "TESTING2" 
oracleCmd.CommandType = CommandType.StoredProcedure 
Dim prm = new OracleParameter("returnvalue", OracleType.VarChar) 
prm.Size = 1024 
prm.Direction = ParameterDirection.ReturnValue 
oracleCmd.Parameters.Add(prm) 
oracleCmd.ExecuteNonQuery() 

Console.WriteLine(prm.Value.ToString) 

그리고 방법으로 작동 여부를 경우 말해, 내가한다고 가정 CreateConnection이 OPEN 연결을 올바르게 반환합니까?

+0

고마워요! 반환 값에 대한 Oracle 매개 변수를 설정하고 ExecuteNonQuery를 호출하면 트릭을 수행했습니다! – Kelly