Yii2:Oracle (oci) 格式的子查询

Yii2: subquery in Oracle (oci) format

我目前有一个连接到 oracle 数据库的模型。它运行良好,我能够毫无问题地执行查询。

但是,以下导致 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]);

学习class配置为调用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 语法而不是 oracle 语法。这意味着新查询 class 正在覆盖 Study 查询。

如何强制新查询使用 oci 语法?

非常感谢

解决方案是指示查询连接到所需的数据库,如下所示:

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

这个效果很好。