Oracle 12.2支持创建的表名长度大于30,最大128个字符

12.2支持创建的表名长度大于30,最大128个字符
[oracle@rac1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Fri Apr 13 17:18:17 2018
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management,
OLAP,
Data Mining and Real Application Testing options


SQL> create table TBL_TST_END_POINT_LOG_ESB_TENANT_BACKUP(id int);
create table TBL_TST_END_POINT_LOG_ESB_TENANT_BACKUP(id int)
             *
ERROR at line 1:
ORA-00972: identifier is too long


[oracle@ora12c1 ~]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Apr 13 17:18:39 2018
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> create table TBL_TST_END_POINT_LOG_ESB_TENANT_BACKUP(id int);
Table created.


当12.2中有超过30个字符长度的表名,使用低版本客户端导出时会报错ORA-39373,建议使用同版本客户端导出或将表名的长度改为30个字符以内
12.2 DataPump Export (EXPDP) Using a Lower Export Client Fails Due To ORA-39373 (文档 ID 2369249.1)
SYMPTOMS
Exporting a 12.2 database using a lower export client version, the following error is hit:
ORA-39373: cannot export TABLE_DATA:"ORACLE"."TBL_TST_END_POINT_LOG_ESB_TENANT_BACKUP" to version 11.2.0.4 due to long identifiers
 
CAUSE
In 12.2 Oracle database, the maximum length of identifiers is increased to 128 bytes for most identifiers, up from 30 bytes in previous releases.
Providing longer identifiers gives customers greater flexibility in defining their naming schemes, such as longer and more expressive table names. Having longer identifiers also enables object name migration between databases with different character sets, such as Thai to Unicode.
Reference Oracle Database 12c Release 2 (12.2) New Features
 
SOLUTION
To avoid the error, there are two options available:
1/ Start the export using 12.2 expdp client.
- or -
2/ If an old expdp client version must be used to export a 12.2 database, rename the objects with a long identifier to a maximum 30 bytes length (30 characters) and restart the export.

REFERENCES
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/newft/new-features.html#GUID-ACC0E96C-8D2D-468F-92E0-2013C7F13455
https://docs.oracle.com/en/database/oracle/oracle-database/12.2/newft/new-features.html#GUID-E82CA1F1-09C0-47DC-BC78-C984EC62BAF2
<think>首先,用户的问题是关于Oracle数据库中筛选remark字段长度大于30的SQL语句的写法。用户提到一个引用,但引用是关于减少SQL请求数量和IN子句限制的,与remark字段筛选无关。引用中说Oracle的IN子句不超过1000个值,但这和当前问题没有直接关系。用户说“上述引用仅供参考”,我应该关注用户的问题本身。 用户上一次的问题和回答:在系统指令中提到,用户上一次的问题是关于SQL语句的写法,具体是Oracle中筛选remark字段长度大于30。系统指令中的示例是关于快速排序的,但当前上下文是SQL查询。 我的响应需要遵循系统指令: - 所有行内数学达式使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 用户的问题是:查找在Oracle数据库中筛选remark字段长度大于30的SQL语句的写法。 关键点:Oracle SQL中如何筛选字段长度大于30。字段是remark。 在SQL中,获取字符串长度的函数: - Oracle使用LENGTH函数或LENGTHB函数(用于字节长度)。用户指定了长度大于30,所以应该是字符长度。 - 标准函数是LENGTH(column_name)。 所以,SQL语句应该是:SELECT * FROM table_name WHERE LENGTH(remark) > 30; 现在,构建回答: - 结构清晰:一步步解决问题。 - 使用中文。 - 确保真实可靠:基于Oracle SQL的知识。 步骤: 1. 解释函数:Oracle中LENGTH函数返回字符串的字符数。 2. 给出SQL语句。 3. 如果有注意事项,比如NULL处理或性能考虑。 用户提到的引用是关于IN子句限制的,但不相关,所以忽略它,除非有连接。 用户说“请尽可能多的参考用户上一次的问题和你的回答”,但在这个对话中,没有之前的问题历史。系统指令是通用的,所以我认为这是新对话的开始。 在系统指令中,有一个示例关于快速排序,但那是示例。当前用户的问题是SQL。 生成相关问题:系统指令要求生成相关问题。我需要基于当前主题生成几个问题。 引用标识:回答中如果有引用,末尾添加引用标识。但在这个问题中,我没有引用来源,所以可能不需要添加。 回答结构: - 先直接回答SQL写法。 - 然后解释。 - 最后生成相关问题。 SQL语句: - 基础:SELECT * FROM table_name WHERE LENGTH(remark) > 30; - 确保使用正确的函数:LENGTH是标准的。 在Oracle中,也可以使用其他函数,但LENGTH是最直接的。 完整回答: - 使用中文:开头介绍,然后给出SQL。 - 独立公式:SQL不是数学公式,但系统指令说“独立公式”,可能包括代码块。在示例中,有代码块用于Python代码。所以,我应该使用代码块来显示SQL语句。 在快速排序示例中,有Python代码在```python ```块中。 所以,对于SQL,我可以使用```sql块。 系统指令: - 行内数学达式:如$x^2$,但SQL不是数学,所以可能不适用。 - 独立公式:SQL语句可以视为公式,但我认为代码块更合适。 在用户可见层指令中说:“回答结构清晰,帮助用户逐步解决问题”,所以我应该步骤化。 大纲回答: 1. 介绍问题:在Oracle中筛选remark字段长度大于302. 解释函数:Oracle提供了LENGTH函数来获取字符串长度。 3. 给出SQL语句:使用代码块。 4. 注意事项:例如,字段NULLLENGTH(NULL)是NULL,所以可能需要处理NULL值。或者性能考虑。 5. 生成相关问题。 关于NULL处理:WHERE LENGTH(remark) > 30 会忽略NULL值,因为NULL > 30是未知(false)。如果用户想包括NULL或处理,可以添加条件。但目前用户只说筛选长度大于30,所以默认行为可能足够。 性能:用户引用中提到性能,但那是关于IN子句的。这里没有IN子句,所以可能不相关。 生成相关问题(§§相关问题§§): - 基于主题:Oracle SQL字符串函数。 - 例如: 1. Oracle中其他字符串函数有哪些? 2. 如何筛选字段长度在某个范围内? 3. LENGTH和LENGTHB的区别? 4. 处理NULL值的最佳实践? 确保回答真实可靠:我是基于标准Oracle SQL知识。 最终响应结构: - 开头回答。 - 代码块。 - 解释。 - 注意事项。 - 相关问题列。 </think>### Oracle中筛选remark字段长度大于30的SQL写法 在Oracle数据库中,如果需要筛选`remark`字段的长度大于30的记录,可以使用Oracle内置的字符串函数`LENGTH()`。这个函数返回字符串的字符数(基于字符长度)。以下是详细的SQL语句写法和相关解释: #### SQL语句写法 ```sql SELECT * FROM WHERE LENGTH(remark) > 30; ``` - **说明**: - `LENGTH(remark)`:计算`remark`字段的字符长度。 - `> 30`:筛选长度大于30的记录。 - 替换``为您的实际。 - **示例**:假设为`employee`,则完整SQL为: ```sql SELECT * FROM employee WHERE LENGTH(remark) > 30; ``` #### 注意事项 1. **NULL值处理**:如果`remark`字段为NULL,`LENGTH(remark)`将返回NULL,而NULL比较(如`NULL > 30`)会视为假(FALSE),因此这些记录不会被包括在结果中。如果需要包括NULL值或自定义处理,可以添加额外条件: ```sql SELECT * FROM WHERE LENGTH(remark) > 30 OR remark IS NULL; ``` 2. **字节长度 vs 字符长度**:Oracle还提供`LENGTHB()`函数用于字节长度(适用于多字节字符集如UTF-8)。如果您的数据库使用多字节字符集且需要基于字节筛选,请使用`LENGTHB(remark) > 30`。但在大多数场景下,`LENGTH()`(字符长度)更常用。 3. **性能考虑**: - 对大执行此查询,如果`remark`字段未索引,可能会全扫描影响性能。可以考虑添加函数索引优化: ```sql CREATE INDEX idx_remark_length ON (LENGTH(remark)); ``` - 用户引用中提到减少SQL请求数量以提高性能[^1],但本查询不涉及IN子句或批量值,因此无需担心长度限制问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值