yii2 - Yii2:Oracle (oci) 格式的子查询
问题描述
我目前有一个连接到 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]);
Study 类被配置为调用 Oracle 数据库。
执行上述查询时,我从 Oracle db 收到以下消息:
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 语法。这意味着新的 Query 类将覆盖 Study 查询。
如何强制新查询使用 oci 语法?
非常感谢
解决方案
解决方案是指示 Query 连接到所需的数据库,如下所示:
$qry = new Query();
$qry-> // usual commands
$qry->all(Yii::$app->dbName);
这很好用。
推荐阅读
- python - 如何将不同尺寸的 rgb 图像转换和组织成 CSV 文件?
- node.js - 如何获取异步webrequest结果并在nodejs中使用另一个函数
- ios - 我可以快速将属性值添加到选择器吗?
- android - Firebase 中是否提供增长详情?
- vim - 如何向第三方vim插件添加非英文帮助文件?
- hibernate - 在事务中运行惰性集合仍然返回 LazyInitializationException
- python - Python 编码错误,未定义我的窗口
- javascript - 当另一个 div 可见时隐藏一个 div
- c# - 在 C# 中,如何实现一个在函数中调用自身的抽象类,例如 Addable 对象类?
- node.js - 如何检测 HDMI 设备是否与 Node JS 连接?