Запросите две таблицы из другой схемы

Это может быть не идеально, но это мое решение (на данный момент, по крайней мере):

JsonConvert.SerializeObject(new { Property = "<script>alert('o hai');</script>" }, new HtmlEncodeStringPropertiesConverter());

с простым JsonConverter, который выполняет HtmlEncode для значения, если оно является строкой

public class HtmlEncodeStringPropertiesConverter : JsonConverter
{
    public override bool CanConvert(Type objectType)
    {
        return objectType == typeof(string);
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        writer.WriteValue(Encoder.HtmlEncode(value.ToString()));
    }
}

(Encoder - Microsoft.Security.Application.Encoder из библиотеки AntiXSS)

10
задан pants 12 December 2015 в 00:34
поделиться

5 ответов

Ссылки на БД - это в значительной степени название игры. Если вы не можете создать его самостоятельно, проверьте, есть ли какие-либо общедоступные ссылки на БД, которые вы могли бы использовать.

Также возможно, что ваши администраторы баз данных захотят использовать одну из своих ссылок на БД для создания материализованного представления S2.Table2 в экземпляре S1.

Другим вариантом могут быть веб-службы, но я предполагаю, что вы » d столкнется с гораздо большим количеством административных проблем, чем при простой ссылке на БД. Рассматривайте их только в том случае, если есть веские причины для отсутствия ссылок (например, две отдельные организации, которые не хотят открывать брандмауэры между своими базами данных).

В противном случае вы попадете на действительно уродливую территорию, но, возможно, вы сможете заставить что-то работать. Например:

  • Откройте оба из инструмента, который может читать данные из нескольких подключений одновременно, и выполнять соединение там. Доступ. Жаба для анализа данных, что угодно.
  • Используйте такой инструмент, как Жаба, чтобы скопировать S2.Table2 в вашу собственную схему («создать в другой схеме» с последующим «копировать данные в другую схему»)
  • Если у вас есть или вы можете get, дополнительные объекты каталога, определенные на обоих серверах, создают материализованное представление S2 как внешнюю таблицу в каталоге, которая может быть записана из S2 и прочитана из S1.

Однако вы действительно не хотите поддерживать какое-либо из этих решений в течение длительного времени.

дополнительные объекты каталога, определенные на обоих серверах, создают материализованное представление S2 как внешнюю таблицу в каталоге, которая может быть записана из S2 и прочитана из S1.

Однако вы действительно не хотите поддерживать какое-либо из этих решений в течение длительного времени.

дополнительные объекты каталога, определенные на обоих серверах, создают материализованное представление S2 как внешнюю таблицу в каталоге, которая может быть записана из S2 и прочитана из S1.

Однако вы действительно не хотите поддерживать какое-либо из этих решений в течение длительного времени.

8
ответ дан 3 December 2019 в 15:52
поделиться

Вам не понадобится ссылка на базу данных, если две схемы находятся в одной базе данных.

Ваш запрос должен работать со схемой S1, при условии, что S1 предоставлена ​​привилегия SELECT на S2. table2 (из учетной записи dba или из схемы S2: GRANT SELECT ON S2.Table2 TO S1 ).

16
ответ дан 3 December 2019 в 15:52
поделиться

Используйте оператор CREATE DATABASE LINK, чтобы создать ссылку на базу данных. Ссылка на базу данных - это объект схемы в одной базе данных, который позволяет вам получать доступ к объектам в другой базе данных.

немного не по теме, но вы можете захотеть использовать новый синтаксис соединения:

SELECT
    T1.Id
    FROM S1.Table1            T1
        INNER JOIN S2.Table2  T2 ON T1.Id = T2.refId

Все условия соединения отображаются в поле "ON" ", а условия фильтрации появляются в" WHERE ".

Этот новый стиль упрощает чтение и понимание соединений LEFT / RIGHT. Кроме того, я не так хорошо знаком с Oracle (с тех пор, как я работал над ним, прошло много лет), но с SQL Server я видел проблемы, когда старый стиль соединения и новый стиль соединения смешивались вместе в запросе с использованием представлений .

1
ответ дан 3 December 2019 в 15:52
поделиться

Вы можете создать сохраненную процедуру java, которая подключается к другой базе данных и выполняет выбор в другой базе данных через JDBC. Сохраненная процедура java должна возвращать коллекцию. Вы можете присоединиться к этой коллекции через выбор из таблицы (...) с таблицей в вашей собственной базе данных.

Примерно похожее решение см. здесь .

Я думаю, что этот подход будет медленным и сложным, потому что вам придется много писать код и создавать оболочку pl / sql для вашей хранимой в java процедуры.

Лучше создать ссылку на базу данных.

1
ответ дан 3 December 2019 в 15:52
поделиться

Вы не указываете, нужна ли эта функция как часть производственного кода, или если вы пытаетесь объединить две таблицы для выполнения одноразового анализа. В последнем случае вы можете использовать Microsoft Access для создания локального файла MDB, который содержит таблицы, связанные с двумя базами данных, а затем написать локальный запрос Access, который ссылается на эти две таблицы. Затем вы можете использовать этот mdb в качестве источника данных для различных инструментов отчетности.

Запросы могут не использовать индексы так же эффективно, как родная ссылка на Oracle db, но это было бы лучше, чем ничего.

edit: Nevermind - я вижу что это уже предлагалось выше.

1
ответ дан 3 December 2019 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: