Код: Выделить всё
DECLARE
V_ID_CB VARCHAR2(15) := '{V_ID_CB}';
V_X_CB VARCHAR2(15) := '{V_X_CB}';
BEGIN
IF V_ID_CB IS NOT NULL THEN
OPEN :result_cursor FOR
SELECT * FROM DEMANDES WHERE ID_CB = V_ID_CB;
ELSIF V_X_CB IS NOT NULL THEN
OPEN :result_cursor FOR
SELECT * FROM SITES;
END IF;
END;
Код: Выделить всё
var content = System.IO.File.ReadAllText(filePath);
var sqlSkript = content;
foreach (var param in parameters)
{
sqlSkript = sqlSkript.Replace($"{{V_{param.Key}}}", param.Value);
}
Код: Выделить всё
public DataTable Execute(string sqlSkript)
{
try
{
if (!(_oraController.OracleConnection.State == ConnectionState.Open))
{
_oraController.OracleConnection.Open();
}
using (var command = new OracleCommand(sqlSkript) { Connection = _oraController.OracleConnection })
{
command.CommandType = CommandType.Text;
OracleParameter resultCursor = new OracleParameter
{
ParameterName = "result_cursor",
OracleDbType = OracleDbType.RefCursor,
Direction = ParameterDirection.Output
};
command.Parameters.Add(resultCursor);
using (var reader = command.ExecuteReader())
{
DataTable dataTable = new DataTable();
dataTable.Load(reader);
return dataTable;
}
}
}
catch (Exception ex)
{
string errorMessage = ex.Message + "\n" + ex.StackTrace;
throw new Exception(errorMessage, ex);
}
}
Теперь я хотел бы запросить несколько таблиц как выходные параметры. Как это возможно? Возможно ли это вообще? Я хочу работать только с одним КУРСОРОМ.
Я пытался достичь своей цели, используя несколько КУРСОРОВ. Однако этот SQL-файл будет постоянно расти, а это означает, что мне придется определять в своем коде новый «result_cursor» для каждого нового SELECT. Для меня это не решение.
Подробнее здесь: https://stackoverflow.com/questions/790 ... th-a-singl