У нас есть хранимая процедура oracle, которая находится в базе данных oracle 10.2. Хранимая процедура содержит определенные входные и выходные параметры. Мы пытаемся создать веб-приложение asp.net для выполнения хранимой процедуры и связать результат, полученный из выходных параметров, в сетку. Но не повезло.
Вот что я сделал до сих пор
Oracle.DataAccess.dll
Я установил компоненты доступа к данным Oracle (ODAC) с Oracle Developer Tools для Visual Studio и использовал его для вызова хранимой процедуры оракула.
** Вот ошибка, которую я получаю **
ORA-06550: строка 1, столбец 7:
PLS-00306: неверный номер или типы аргументов при вызове 'CALC_NUMBERVOTES'
ORA-06550: строка 1, столбец 7:
PLS-00306: неверный номер или типы аргументов при вызове 'CALC_NUMBERVOTES'
ORA-06550: строка 1, столбец 7:
PLS-00306: неверный номер или типы аргументов при вызове 'CALC_NUMBERVOTES'
ORA-06550: строка 1, столбец 7:
PLS-00306: неверный номер или типы аргументов при вызове 'CALC_NUMBERVOTES'
ORA-06550: строка 1, столбец 7:
PL / SQL: оператор игнорируется
любая помощь очень ценится.
устный код хранимой процедуры
PROCEDURE calc_numbervotes (
i_Office IN ELECTIONRESULTS.office%TYPE,
o_candidate OUT tblcandidate ,
o_party OUT tblparty,
o_votes OUT tblvotes,
o_percAll OUT tblpercAll)
IS
/***************Find Number of candidate per office and party******************/
CURSOR c1 is
SELECT distinct candidate, party,sum(votes) totalvotes
FROM ELECTIONRESULTS
WHERE candidate not in ('Registered Voters' )
AND office = i_office
AND Precinct <> ' '
GROUP BY candidate,party
ORDER BY sum(votes) desc;
/****************** Find total county votes per candidate *********************/
CURSOR c2 is
SELECT sum(votes) from ELECTIONRESULTS
WHERE candidate !='Registered Voters'
AND office = i_Office
AND Precinct <> ' ';
recCount NUMBER DEFAULT 0;
totvotesall NUMBER;
totvotescandidateprec NUMBER;
BEGIN
OPEN c2;
FETCH c2 into totvotesall;
CLOSE c2;
************************************************************/
FOR rec in c1 LOOP
recCount:= recCount + 1;
o_candidate(recCount):= rec.candidate;
o_party(recCount) := rec.party;
o_votes(recCount) := rec.totalvotes;
if rec.totalvotes = 0 then
o_percAll(recCount) := 0;
else
o_percAll(recCount) := round((rec.totalvotes/totvotesall)*100,2);
end if;
END LOOP;
END calc_numbervotes;
код asp.net
Dim constr As String = "data source=ds;user id=uid;password=pwd;"
Dim orclCon As OracleConnection
orclCon = New OracleConnection(constr)
Dim objCmd As OracleCommand = New OracleCommand()
objCmd.Connection = orclCon
objCmd.CommandText = "pkg_calc_votes.calc_numbervotes"
objCmd.CommandType = CommandType.StoredProcedure
objCmd.Parameters.Add(New OracleParameter("i_office", OracleDbType.NVarchar2, 255)).Value = "U.S. CONGRESS 05"
objCmd.Parameters.Add(New OracleParameter("o_party", OracleDbType.NVarchar2, 10)).Direction = ParameterDirection.Output
objCmd.Parameters.Add(New OracleParameter("o_candidate", OracleDbType.NVarchar2, 255)).Direction = ParameterDirection.Output
objCmd.Parameters.Add(New OracleParameter("o_votes", OracleDbType.Decimal, 10)).Direction = ParameterDirection.Output
objCmd.Parameters.Add(New OracleParameter("o_percAll", OracleDbType.Double, 10)).Direction = ParameterDirection.Output
orclCon.Open()
Dim orclDtRdr As OracleDataReader = Nothing
orclDtRdr = objCmd.ExecuteReader()
gvCursor.DataSource() = orclDtRdr
gvCursor.DataBind()
orclDtRdr.Close()
orclCon.Close()
Сохраненный обработчик выбирает все данные из таблицы в базе данных, кроме одного значения, которое _o_percAll_. этот параметр рассчитывается в sp.
Спасибо,
Eyad