• SQL 报错信息整理及解决方案(持续更新)


    整理一下自己遇见过的 SQL 各种报错信息及相应解决方法,方便以后查阅,主要平台为 Oracle:

    • ORA-01461: 仅能绑定要插入 LONG 列的 LONG 值:

      • 原因:插入操作时,数据大于字段设定大小,Oracle 会自动将数据转为 long 型,然后报插入失败错误。
      • 解决:更改数据大小,或者将字段设为 clob 或 blob 类型。
    • "ORA-01012: not logged on" 以及 "Connected to an idle instance":

      • 原因:重启 Oracle 服务器时,如果在运行 shutdown 指令关闭数据库的时候意外断开连接,后面想再次进入 Oracle 服务器启动时便可能会遇见如下报错:
        • 使用 sqlplus /nolog 进入 SQL Plus 后,想连接数据库 conn username/password as sysdba 时,会报 Connected to an idle instance. 错误。
        • 在 SQL Plus 界面,想直接 startup 启动数据库时,会报 ORA-01012: not logged on 错误。

        通过查阅资料,判断报错原因是在关闭数据库意外退出后,ORACLE一直处于锁定状态,不再允许其他操作。

      • 解决:
        • 先关闭ORACLE进程:

          ps -ef|grep ora_dbw0_$ORACLE_SID //找到ORACLE进程
          kill -9 PID //通过找到的进程PID号kill掉该进程
        • 然后重启ORACLE:

          sqlplus /nolog //进入SQL Plus
          startup //启动ORACLE

        最后附上关闭ORACLE的命令说明,以免造成错误的关闭操作:

        • shutdown normal(所有连接断开后关闭数据库)
        • shutdown transactional(所有事务结束后主动断开连接,并关闭数据库)
        • shutdown immediate(主动断开连接和事务)
        • shutdown abort(立即关闭数据库,由于该操作不会同步数据,清空回滚段,不触发检查点,所以比较危险,每次启动需要实例恢复)
    • ORA-00913: 值过多:

      • 原因:向表中插入数据时字段个数不匹配,例如
        insert into table_1 (?, ?) values (?, ?, ?)

        插入值比字段多了一个,则会报该错误

      • 解决:插入字段与插入值修改为个数一致就可以解决了
    • ORA-01791:不是SELECTed表达式错误:

      • 原因:用 select 查询语句时,若同时使用distinct去重与order by排序,就会报该错误,如
        select distinct a from table1 where ... order by b;

        这是因为 order by 根据 b 列排序时与 distinct 产生冲突,distinct 找不到 b 列。

      • 解决:查询列中添加b列,即:
        select distinct a,b from table1 where ... order by b;
        
        
  • 相关阅读:
    「SDOI2014」向量集 解题报告
    HNOI 2014 世界树
    LOJ #2205. 「HNOI2014」画框 解题报告
    KM模板
    洛谷 [HNOI2014]道路堵塞 解题报告
    [AHOI2014/JSOI2014] 解题报告
    AndroidStudio中添加依赖的三种方式以及如何引入so文件和arr文件
    android 四大组件详解
    Android—— ListView 的简单用法及定制ListView界面
    Android Studio 使用VCS版本控制
  • 原文地址:https://www.cnblogs.com/honoka/p/5085322.html
Copyright © 2020-2023  润新知