У меня есть база данных Oracle 10g, доступ к которой осуществляется из приложения ASP.NET. Хотя я активно использовал SQL Server во многих различных аспектах и Oracle для запросов и отчетов, я впервые использую Oracle в качестве базы данных OLTP для приложения.
Процедуры уровня базы данных в пакетах обычно имеют следующий вид:
-- TYPE refcur IS REF CURSOR;
PROCEDURE get_some_stuff(o_cursor OUT refcur, p_param1 IN INTEGER, p_param2 IN INTEGER) IS
BEGIN
OPEN o_cursor FOR
SELECT whatever
FROM whatever
END
Я предполагаю, что это сделано таким образом, чтобы уровень ADO.NET мог использовать курсор из выходного параметра, и, насколько я понимаю, это приемлемая передовая практика для вызова процессов Oracle из .NET.
В SQL Server, например, у нас нет явных курсоров ref, если процедура возвращает набор результатов (или несколько наборов результатов), который доступен как набор результатов вывода как в ADO.NET, так и в SSMS, и вы можете просто протестировать SP, выполнив EXEC spname param1, param2
.
Проблема, с которой я столкнулся, заключается в том, что я не знаю, как вызывать их непосредственно в SQL в Toad, например, чтобы иметь возможность сначала протестировать изменения на уровне PL / SQL, прежде чем переходить в приложение. Я очень привык к возможности выполнять и даже повторно смешивать хранимые процессы и функции в SQL Server, чтобы иметь возможность реорганизовать уровень интерфейса базы данных, не влияя на внешний интерфейс кода уровня приложения.