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);
这个效果很好。
我目前有一个连接到 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);
这个效果很好。