Yii2: подзапрос в формате Oracle (oci) - PullRequest
0 голосов
/ 17 июня 2019

В настоящее время у меня есть модель, которая связана с базой данных оракула.Это работает хорошо, и я могу выполнять запросы без проблем.

Однако следующее приводит к тому, что база данных oracle отклоняет запрос:

    $subquery = mytable::find()->where(['status'=>'success']);

    $mainQuery = new Query(); 
    $mainQuery->select([...])
    ->from(['subQ'=>$subquery])
    ->where(...

В приведенном выше примере $ subquery работает нормально (если я запускаю его сам), но комбинацияотклонено базой данных Oracle

Я думаю, проблема в том, что "new Query ()" вызывает запрос mysql, а не запрос oci.Как создать экземпляр Query () как запрос oci?

Любая помощь приветствуется.

Пример

Я создал следующий простой запрос для демонстрации проблемы:

$subQuery = Study::find()->limit(10);
$mainQuery = new Query;
$mainQuery->select(["*"])->from(['subQ'=>$subQuery]);

Класс Study настроен для вызова базы данных Oracle.

Когда вышеупомянутый запрос выполняется, я получаю следующее сообщение из базы данных Oracle:

SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user 'username'@'db.url' for table 'study'
The SQL being executed was: SELECT * FROM (SELECT * FROM `SCHEMA`.`STUDY` LIMIT 10) `subQ`

Если я выполняю только $ subQuery, все в порядке и возвращается 10 записей.Я не эксперт по запросам Oracle, но мне кажется, что отклоняемый запрос использует синтаксис MySQl, а не синтаксис оракула.Это означает, что новый класс Query переопределяет запрос Study.

Как заставить новый запрос использовать синтаксис oci?

Большое спасибо

1 Ответ

0 голосов
/ 29 июня 2019

Решение состоит в том, чтобы поручить Запросу подключиться к требуемой базе данных следующим образом:

$qry = new Query();
$qry-> // usual commands
$qry->all(Yii::$app->dbName);

Это хорошо работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...