程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> SQL 報錯信息整理及解決方案(持續更新),sql解決方案

SQL 報錯信息整理及解決方案(持續更新),sql解決方案

編輯:Oracle教程

SQL 報錯信息整理及解決方案(持續更新),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;
      
      

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved