Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Viton-Zizu Участник
Вступление в Клуб: 10.12.2015
|
Чт Дек 10, 2015 07:20  Загрузчик из IBSO (C#) |
|
Полезность: Нет оценки
|
Ребят, есть такая задача, выгружать определенное представление периодически в свою базу. Решил сделать загрузчик на C# для этой задачи, создаю коннект:
Код: | string oradb = "Data Source=ORCL;User Id=hr;Password=hr;";
OracleConnection conn = new OracleConnection(oradb); // C#
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from IBS.VW_DEBT_CRED";
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader(); |
Но в итоге в ридер попадает таблица без записей, я так понимаю нужно добавить executor.lock_open ? Но как? просто в текст этого же запроса? в oracle не силен.
Может есть варианты решить эту задачу с помощью pl\sql developer?
Доступ к базе очень ограниченный, т.е. могу просматривать только представления. Доступа к таблицам нет.
Попутный вопрос, как можно связывать два представления, для более быстрой выгрузки? Если делаю просто путем вложенного запроса то может жутко долго грузиться! |
|
 |
KhrushchevAV Участник со стажем
Вступление в Клуб: 17.10.2014
|
Чт Дек 10, 2015 08:03   |
|
Полезность: Нет оценки
|
Обычно "select * from SOME_VIEW" работает без executor.lock_open. (Если в представлении не использованы мудреные вызовы).
Я бы сначала посмотрел, что вернет этот же селект, под этим же пользователем из sqlplus или sqldeveloper. И по результатам уже думал куда копать. Может в C# в направлении рекордсет, а может не положено Вам видеть... |
|
 |
Viton-Zizu Участник
Вступление в Клуб: 10.12.2015
|
Чт Дек 10, 2015 09:17   |
|
Полезность: Нет оценки
|
ну вот элементарную таблицу all_views, sql developer видит, а в C# получаю пустой вариант. |
|
 |
KhrushchevAV Участник со стажем
Вступление в Клуб: 17.10.2014
|
Чт Дек 10, 2015 09:33   |
|
Полезность: Нет оценки
|
И это означает... Что тут не причем. sqldeveloper его не запускает. Тут Вам надо копать в C#. Как там работать правильно с OracleDataReader...
Что у Вас дальше по коду, мне не видно. Что-то типа:
Код: | try
{
while (dr.Read())
{
Console.WriteLine(dr.GetValue(0));
}
}
finally
{
dr.Close();
} |
? |
|
 |
Viton-Zizu Участник
Вступление в Клуб: 10.12.2015
|
Чт Дек 10, 2015 10:08   |
|
Полезность: Нет оценки
|
и вправду, я просто не довел дело до логического конца))
Спасибо!!!
А по работе вьюх сразу не подскажите? как правильней в оракле делать связку двух представлений? |
|
 |
KhrushchevAV Участник со стажем
Вступление в Клуб: 17.10.2014
|
Чт Дек 10, 2015 12:21   |
|
Полезность: Нет оценки
|
Цитата: | А по работе вьюх сразу не подскажите? как правильней в оракле делать связку двух представлений? |
Мне вопрос не понятен.
- Как "делать связку двух представлений"?
- Так же как и двух таблиц.
Код: | SELECT * FORM V1, V2 WHERE V1.PK=V2.FK; |
В чем, конкретно, проблема?
Если написать, например (опять я гадаю), только:
Код: | SELECT * FORM V1, V2 |
То получим, что на каждую строку v1 будут выбраны ВСЕ строки v2, на вторую строку опять ВСЕ... и т.д. (Гуглить "картезианское произведение") Не надо так делать.
Поля по которым связывать таблицы (или представления), надо выбирать правильно. В идеале, это должны быть "первичный ключ" и "внешний ключ". И тут Вам не обойтись без некоторого понимания структуры данных... |
|
 |
Viton-Zizu Участник
Вступление в Клуб: 10.12.2015
|
Пт Дек 11, 2015 09:11   |
|
Полезность: Нет оценки
|
Спасибо большое за ответы!
Просто делаю запрос также как вы расписали, они у меня довольно долго выполняются, думал может примудрость какая есть) |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|