Вы можете использовать любую из этих команд Vim Ex - Выход из нескольких окон и буферов :
:qa
:qall
Выйдите из Vim, если только не было буферов, которые были изменены. (Используйте :bmod
, чтобы перейти к следующему измененному буферу). Когда установлено «autowriteall», все измененные буферы будут записаны, например, :wqall
.
:conf qa
:confirm qall
Выход Vim. Вызовите подсказку, когда некоторые буферы были изменены. См. :confirm
.
:qa!
:qall!
Выход Vim. Любые изменения в буферах будут потеряны. Также см. :cquit
, он делает то же самое, но выходит с ненулевым значением.
:quita
:quitall
:quita!
:quitall!
То же, что и :qall
.
:wqa
:wqall
:xa
:xall
Запишите все измененные буферы и выйдите из Vim. Если существуют буферы без имени файла, которые доступны только для чтения или не могут быть записаны по другой причине, Vim не завершит работу.
:conf wqa
:confirm wqall
:conf xa
:confirm xall
Запишите все измененные буферы и выйдите из Vim. Вызовите подсказку, когда некоторые буферы доступны только для чтения или не могут быть записаны по другой причине. Смотри :confirm
.
:wqa!
:xa!
:wqall!
:xall!
Запишите все измененные буферы, даже те, которые только для чтения, и выйдите из Vim. Если есть буферы без имени файла или которые не могут быть записаны по другой причине, Vim не выйдет.
Чтобы прочитать об этом в Vim, введите следующую команду Ex
:help window-exit
Вы должны написать анонимный блок pl / sql, который возвращает 3 указателя ref.
edit1: Здесь это делается в анонимном блоке pl / sql с одним курсором. Он должен работать и с тремя. Курсоры Oracle ref не блокируют данные, и они являются самым быстрым способом вернуть набор результатов из процедуры pl / sql или анонимного блока pl / sql.
http://www.oracle.com/technetwork/issue-archive/2006/06-jan/o16odpnet-087852.html
Как насчет:
var sql = @"
select * from table1 UNION
select * from table2 UNION
select * from table3";
Почему бы вместо этого не использовать хранимые процедуры?
Но если вы хотите объединить их во встроенный запрос, вы можете использовать точку с запятой (;) для разделения операторов.
var sql = @"BEGIN
select * from table1;
select * from table2;
select * from table3;
END;";
ИЗМЕНИТЬ : Вы посмотрите этот вопрос SO .
EDIT2: Взгляните на этот ответ .
Пример на C# с несколькими курсорами и входным параметром:
string ConnectionString = "connectionString";
OracleConnection conn = new OracleConnection(ConnectionString);
StringBuilder sql = new StringBuilder();
sql.Append("begin ");
sql.Append("open :1 for select * from table_1 where id = :id; ");
sql.Append("open :2 for select * from table_2; ");
sql.Append("open :3 for select * from table_3; ");
sql.Append("end;");
OracleCommand comm = new OracleCommand(sql.ToString(),_conn);
comm.Parameters.Add("p_cursor_1", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);
comm.Parameters.Add("p_id", OracleDbType.Int32, Id, ParameterDirection.Input);
comm.Parameters.Add("p_cursor_2", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);
comm.Parameters.Add("p_cursor_3", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output);
conn.Open();
OracleDataReader dr = comm.ExecuteReader();