IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 执行Oracle的SQL语句报错【ORA-00904: “CREATETIME“: 标识符无效】、【ORA-00913: 值过多】解决办法 -> 正文阅读

[大数据]执行Oracle的SQL语句报错【ORA-00904: “CREATETIME“: 标识符无效】、【ORA-00913: 值过多】解决办法

一、问题描述

①使用navicat建模工具建立完成表结构后,导出sql语句或直接同步该模型到指定用户模式中,我们使用正常的查询语句查询内容报错【ORA-00904: "CREATETIME": 标识符无效】;

②执行插入的sql语句时报错【ORA-00913: 值过多】;

二、问题分析

2.1、ORA-00904: "CREATETIME": 标识符无效

我们检查navicat建模工具导出的建表语句,发现字段都是添加双引号的;

?

如果我们使用sql语句比如【SELECT CreateTime FROM "IQC_MaterialStandard_Record"】,就会报如下所示的错误:

?

Oracle中单引号、双引号说明
序号说明
1

在Oracle中双引号的作用是:

1、【如果创建对象的时候,对象名、字段名加双引号,则表示Oracle将严格区分大小写】;

2、【否则Oracle都默认大写】

2

单引号表示:加了单引号的字段是一个字类似字符串,并不区分大小写。

单引号用于标识字符与数字的区别;

当指定字符串文本时,必须用单引号将字符串文本引住。

1-引用一个字符串常量,也就是界定一个字符串的开始和结束

 select * from TEST where ID='100010';  --查询ID为100010的字符信息

 select * from TEST where ID=100010;  --查询JID为100010的整形数字


2-转义符,对紧随其后出现的字符(单引号)进行转义 

 select ' '' ' result from dual; --第二个单引号被作为转义符,第三个单引号被转义.结果为 '

 select 'name''''' result from dual; --结果为name''

 select 'name'||'''' result from dual;  --结果为name','||' 被转义为字符拼接
3

双引号用于【关键字对象名字段名别名

双引号场景示例:

1、使用了关键字
select "sysdate" from dual;  -- 等同于select sysdate from dual; 

2、严格区分字段的大小写
select * from test where "ReName" = '思雨'; --双引号提示oracle严格区分大小写,rename将报错

3、使用别名
select RENAME "别名" from TEST; --别名中若有特殊字符或关键字,需要双引号包住

2.2、ORA-00913: 值过多

?查看我们的sql语句【
INSERT INTO "IQC_MaterialStandard_Record"("Id","InspectionLot","MaterialType") VALUES('100010','3002004101','备件','2022-06-10 13:29:36')】,仔细查看后发现是由于需插入的数据多于字段,匹配不上报的错误。

三、解决方法

3.1、解决ORA-00904: "XXX字段": 标识符无效

方法一:给字段添加上双引号在查询

//原来报错语句
SELECT CreateTime FROM "IQC_MaterialStandard_Record"

//修改后可以正常执行的语句(需要给字段添加双引号)
SELECT "CreateTime" FROM "IQC_MaterialStandard_Record"
        /// <summary>
        /// 串联字符串数组的所有元素,其中在每个元素之间使用指定的分隔符,在每个元素两边添加指定标识符。
        /// </summary>
        /// <param name="separator">分隔符(比如逗号【","】)</param>
        /// <param name="fieldContainMark">字段两边包含的标识符(比如字段两边包含双引号【"\""】)</param>
        /// <param name="values">需串联的数组</param>
        /// <returns>返回串联字符串内容</returns>
        public static string Join(String separator,string fieldContainMark, params string[] values)
        {
            if (string.IsNullOrEmpty(separator) || values == null || values.Length <= 0) return null;

            string str = string.Empty;
            int len = values.Length;

            if (!string.IsNullOrEmpty(fieldContainMark))
            {
                for (int i = 0; i < len - 1; i++)
                {
                    str += $"{fieldContainMark}{values[i]}{fieldContainMark}{separator}";
                }
                str += $"{fieldContainMark}{values[len - 1]}{fieldContainMark}";
            }
            else
            {
                for (int i = 0; i < len - 1; i++)
                {
                    str += $"{values[i]}{separator}";
                }
                str += $"{values[len - 1]}";
            }

            return str;
        }
 //获取到指定模型的属性名称
 var props = typeof(MaterialModel).GetProperties().Select(x => x.Name).ToArray();

//组装插入sql(获取到模型属性作为字段名称且带双引号的数组)
string cols = EntityHelper.Join(",","\"",props);

方法二:重新创建该表,去除字段上的双引号

?也可以使用其他编辑工具替换掉sql语句中的双引号,然后执行sql语句重新创建表后执行以前的语句就可以正常执行了。

3.2、解决ORA-00913: 值过多

检查sql语句发现是填充的值多于指定的字段内容,只用添加上对应的字段或删除多于的值即可,如下:

//原来的错误sql语句
INSERT INTO "IQC_MaterialStandard_Record"("Id","InspectionLot","MaterialType") VALUES('100010','3002004101','备件','2022-06-10 13:29:36')

//现在正确的sql语句(具体需要添加字段还是删除数据还需要根据自己建立的表字段查看)
INSERT INTO "IQC_MaterialStandard_Record"("Id","InspectionLot","MaterialType","CreateTime") VALUES('100010','3002004101','备件','2022-06-10 13:29:36')
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-06-16 21:45:45  更:2022-06-16 21:47:44 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:39:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码