解決方案 -SQL腳本建表產生ORA-00942錯誤


一、問題簡介

1、開發環境

      操作系統:win10

      數 據 庫:Oracle11g

      數據庫連接工具:Navicat  Premium

2、問題簡述

       在使用SQL Development、Navicat  Premium、powerdesigner生成SQL腳本 或 使用Navicat  Premium的“數據傳輸”功能,將舊的數據庫復制到Oracle數據庫后,再使用select查詢語句查詢表中記錄會出錯。

     image

二、問題解決方案

1、原因分析

     Oracle數據庫的語法是大小寫敏感的,通過SQL語句創建表時,會自動將表名轉換成大寫。但是如果表名或字段名加上""后,Oracle不會將雙引號內的表名變成大寫。通過數據庫連接工具、數據傳輸功能生成的SQL語句中的表名生成都帶有雙引號。

                                    image

       在Oracle數據庫執行這種語句后,表名就變成了【表名加雙引號】的方式。我們可以通過表名加雙引號的方式來查詢表。

  1 select * from "emp"

運行結果如下:

         image

2、更改表名和別名

  1 --修改表名
  2 --方法一:ALTER TABLE "emp"  RENAME TO emp;
  3 --方法二:create emp as select * from "emp";
  4 --方法三:使用rename方法,但只能修改當前用戶下的表
  5 rename "emp" to emp;
  6 rename "dept" to dept;
  7 rename "SALGRADE" to SALGRADE;
  8 rename "sysdiagrams" to sysdiagrams;
  9 
 10 --修改字段名
 11 alter table dept rename column "deptno" to deptno;
 12 alter table dept rename column "dname" to dname;
 13 alter table dept rename column "loc" to loc;
 14 
 15  --測試程序
 16 select * from emp;
 17 select * from dept;
 18 select * from SALGRADE;
 19 select * from sysdiagrams;
 20 
 21 select * from dept  where deptno = 10

3、Navicat  Premium解決辦法

       使用Navicat  Premium進行數據傳輸,把其他數據庫中的數據傳輸到Oracle數據庫時,需要在【高級】選項卡中勾選【轉換對象名為大寫】才可。

     搜狗截圖20180125113829   搜狗截圖20180125113803

4、PowerDesigner解決辦法

(1)修改Naming Convention配置

    在[Tools->Model Options->Naming Convention]中,把Name和Code的Charcter case屬性設成Uppercase(只要不是混合模式即可)。

                        image

(2)修改CaseSensitivityUsingQuote配置

      在【Database->Edit current database->Script->Sql->Format】下將CaseSensitivityUsingQuote的comment為“Determines if the case sensitivity for identifiers is managed using double quotes”,表示是否適用雙引號來規定標識符的大小寫,可以看到右邊的values默認值為“YES”,改為“No”即可!

            image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM