# Oracle 常用语法常见报错

Posted MarlonBrando1998

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了# Oracle 常用语法常见报错相关的知识,希望对你有一定的参考价值。

Oracle 常用语法

封闭符
  • 双引号作为封闭符
  • 数据库中字段默认为大写,如果需要小写,在建表DDL中用双引号进行修饰
单条插入自增主键
  • 批量插入估计也可以使用此方法
<insert id="insert" parameterType="map" >
   <selectKey  keyProperty="id" resultType="int" order="BEFORE">
       select nvl(max(id),0)+1 from test
   </selectKey>
insert into test(ID,MEMBER_ID) values(#{id},#{memberId})
</insert>
批量插入没有自增操作
<insert id="insertbatch">
insert into test(column1,column2,column3)
 <foreach collection="list"   item="item" separator="union all">
 	(select 
     		to_char(
            nvl(
            <choose>
                <when test="item.column1 !=null">#{item.column1}</when>
                <otherwise>null</otherwise>
            </choose>
            ,null)
            ),
     		to_char(
            nvl(
            <choose>
                <when test="item.column2 !=null">#{item.column2}</when>
                <otherwise>null</otherwise>
            </choose>
            ,null)
            ),
    		to_char(
            nvl(
            <choose>
                <when test="item.column3 !=null">#{item.column3}</when>
                <otherwise>null</otherwise>
            </choose>
            ,null)
            )
     from dual)
</foreach>
</insert>
批量插入含有自增主键
  • 新建一个序列获取自增序号:
CREATE SEQUENCE TEST_SEQUENCE INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999999999999999999999999 NOCYCLE NOCACHE NOORDER ;
  • 批量插入
 <insert id="insertBatch">
insert into table(ID,COLUMN1,RECORDTIME)
select TEST_SEQUENCE.NEXTVAL ID,m.COLUMN1,to_date(m.RECORDTIME,'yyyy-mm-dd hh24:mi:ss') from (
<foreach collection ="list" item ="item" index ="index" separator ="union all" >
    select
     to_char(
     nvl(<choose><when test="item.column1 !=null">#{item.column1}</when><otherwise>null</otherwise></choose>,null)) COLUMN1,
     nvl(<choose><when test="item.recordtime !=null">#{item.recordtime}</when><otherwise>null</otherwise></choose>,null) RECORDTIME from dual
</foreach>  
) m
</insert>insert>     
limit 语法
select * from test where rownum =1;
类似于group_concat的函数
  • 使用wm_concat
Oracle 查询不大小写区分
转为小写  LOWER('ABC') 结果 abc
转为大写  UPPER('aBc') 结果 ABC
dual表的用途
  • dual是一个虚拟表,用来构成select的语法规则
  • 例如:
SELECT 'zhangsan' AS name,13 AS age FROM dual

Oracle 常见错误

SQL 错误 [979] [42000]: ORA-00979: 不是 GROUP BY 表达式
  • 错误描述:group by语句后面的字段和列中的字段应该匹配
  • 解决方式:使用distinct代替groupby查询
SQL 错误 [923] [42000]: ORA-00923: 未找到要求的 FROM 关键字
  • 错误描述:缺少from表的内容
  • 解决方式:SELECT 'zhangsan' AS name,13 AS age FROM dual使用dual虚拟表
SQL 错误 [904] [42000]: ORA-00904: “type”: 标识符无效
  • 错误描述:select的列和数据库表中字段不一致,注意大小写,特殊字符加上双引号

  • 解决方式:

    select "TYPE" from 表名;
    

以上是关于# Oracle 常用语法常见报错的主要内容,如果未能解决你的问题,请参考以下文章

python常见报错信息!错误和异常!附带处理方法

ORACLE疑难杂症解决方案:几大常见报错解决应用案例

php常见报错

JVM-Sandbox常见报错

PHP常见报错解析

Git 同步代码两例常见报错