首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迁移的数据库的Oracle SQL Developer小写标识符?

迁移的数据库的Oracle SQL Developer小写标识符?
EN

Stack Overflow用户
提问于 2013-11-18 23:02:44
回答 2查看 1.2K关注 0票数 0

我目前正在为一个特定的客户端将一个基于Code Igniter的应用程序从MySQL移植到Oracle (11g)。MySQL和Oracle后端必须协同工作(即我们不能丢弃其中一个)。MySQL DB使用大约100个表,其中所有标识符都是小写的。当我使用Oracle的SQL Developer工具将这个数据库迁移到Oracle时,我最终得到了一个“正确”转换的数据库,但是...都是大写的标识符。

现在,对于正常使用,这并不是真正的问题,但是当使用CI活动记录类时,问题就出现了。它生成如下查询: SELECT "somecolumn“FROM "sometable”WHERE "someothercolumn“= somevalue

问题是,当这些标识符使用“引号”时,Oracle会强制以区分大小写的方式解释这些标识符,这在本例中造成了严重破坏。

修补CI和/或应用程序的核心代码以使所有查询都使用不区分大小写的标识符(即删除标识符两边的“引号”),或者将所有标识符动态转换为大写标识符,这是不可取的,因为未来潜在的框架升级会受到影响。将所有MySQL标识符重命名为大写也是一个非常不吸引人的方案,并且对应用程序本身有更大的影响--当然不是一个选项。

相反,我想要实现的是让迁移过程(即使用SQL Developer)只考虑源数据库的情况,并按照到目前为止所做的那样执行转换,除了标识符不会更改为其大写版本之外。

我在网上搜索了一笔公平的交易,以找到实现这一目标的方法,到目前为止,它还没有起到作用。

有没有人知道这是否可以做到,如果可以:如何做到?转换为全大写标识符是否可能是一个全局DB设置?我会认为这是一件微不足道的事情,但到目前为止我还没有弄清楚,我确实遇到了一些相关的参考资料,听起来并不是很有希望……

EN

回答 2

Stack Overflow用户

发布于 2013-11-18 23:18:31

如果可以获得数据库迁移创建的模式脚本,则只需将标识符(表名、视图名、列名等)改为用双引号括起来即可。(我不确定SQL Developer迁移实际上是否有保留大小写的选项)。

如果没有引号,Oracle将假定所有标识符都不区分大小写。但是,这在内部存储为数据字典中的大写字符串。使用引号将强制Oracle对架构对象使用完全相同的大小写。

例如:

代码语言:javascript
复制
create table Customers
( 
  Name varchar2(100), 
  CreationDate date not null 
);

将在数据字典中创建内部客户,您可以编写如下查询:

代码语言:javascript
复制
select name, creationdate from customers;

或者:

代码语言:javascript
复制
create table "Customers"
( 
  "Name" varchar2(100), 
  "CreationDate" date not null 
);

将在内部创建“客户”。您只能使用引号和大小写来编写查询:

代码语言:javascript
复制
select "Name", "CreationDate" from "Customers";
票数 0
EN

Stack Overflow用户

发布于 2014-04-29 22:33:34

我之前已经实现了这一点,并简单地编辑了oci8_driver.php (../system/database/oci),如下所示:

代码语言:javascript
复制
// The character used for excaping
var $_escape_char = '"';

代码语言:javascript
复制
// The character used for excaping
var $_escape_char = '';

斯图尔特

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20050949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档