[20210423]建立檢視以及欄位長度.txt
[20210423]建立檢視以及欄位長度.txt
--//這個測試源於我在19c上使用toad遇到的問題,使用toad的schema brower看錶的script,出現如下錯誤:
ORA-00904 REF invalid identifier.
--//後來發現是由於19c檢視dba_obj_audit_opts的定義取消了ref欄位.我想在11g下測試改名源檢視,重新定義新的檢視遇到的問題,透過
--//例子說明.
1.環境:
SCOTT@book> @ ver1
PORT_STRING VERSION BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx 11.2.0.4.0 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
2.建立檢視:
SCOTT@book> create view v_dept as select deptno,SUBSTR (dname, 1, 1) || '/' || SUBSTR (dname, 2, 1) dnamex from dept;
View created.
SCOTT@book> @ desc v_dept
Name Null? Type
-------- -------- ----------------------------
1 DEPTNO NOT NULL NUMBER(2)
2 DNAMEX VARCHAR2(5)
--//你可以發現dnamex的型別是varchar2,長度是5.為什麼?
SCOTT@book> create view v_deptx as select deptno,SUBSTRB (dname, 1, 1) || '/' || SUBSTRB (dname, 2, 1) dnamex from dept;
View created.
SCOTT@book> @ desc v_deptx
Name Null? Type
-------- -------- ----------------------------
1 DEPTNO NOT NULL NUMBER(2)
2 DNAMEX VARCHAR2(3)
--//採用substrb函式正常,很明顯這是字符集導致的問題。
--//看看dba_obj_audit_opts的定義:
SCOTT@book> @ desc dba_obj_audit_opts
Name Null? Type
------------ -------- -------------
1 OWNER VARCHAR2(30)
2 OBJECT_NAME VARCHAR2(30)
3 OBJECT_TYPE VARCHAR2(23)
4 ALT VARCHAR2(3)
5 AUD VARCHAR2(3)
6 COM VARCHAR2(3)
7 DEL VARCHAR2(3)
8 GRA VARCHAR2(3)
9 IND VARCHAR2(3)
10 INS VARCHAR2(3)
11 LOC VARCHAR2(3)
12 REN VARCHAR2(3)
13 SEL VARCHAR2(3)
14 UPD VARCHAR2(3)
15 REF CHAR(3)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
16 EXE VARCHAR2(3)
17 CRE VARCHAR2(3)
18 REA VARCHAR2(3)
19 WRI VARCHAR2(3)
20 FBK VARCHAR2(3)
--//裡面相似的方式建立檢視的字串長度是3,為什麼呢?
--//很容易想到的問題,oracle開始建立的資料庫字符集是ASCII的.然後在透過alter database修改為別的字符集.
--//我們生產系統資料庫字符集都是ZHS16GBK.
3.分析:
--//正好我們一個老的的資料庫使用的字符集是US7ASCII的,在上面測試看看.
XXXX> select * from v$version where rownum=1;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
XXXX> create view scott.v_dept as select deptno,SUBSTR (dname, 1, 1) || '/' || SUBSTR (dname, 2, 1) dnamex from scott.dept;
View created.
XXXX> set linesize 80
XXXX> desc scott.v_dept;
Name Null? Type
------- -------- ----------------------------
DEPTNO NOT NULL NUMBER(2)
DNAMEX VARCHAR2(3)
--//驗證正確。
XXXX> drop view scott.v_dept;
View dropped.
4.能否在字符集ZHS16GBK建立varchar2(3)的檢視呢?
--//我嘗試修改使用者的環境變數NLS_LANG=AMERICAN_AMERICA.US7ASCII,登陸後測試不行.
$ export NLS_LANG=AMERICAN_AMERICA.US7ASCII
SCOTT@book> create or replace view v_dept as select deptno,SUBSTR (dname, 1, 1) || '/' || SUBSTR (dname, 2, 1) dnamex from dept;
View created.
SCOTT@book> @ desc v_dept;
Name Null? Type
------- -------- ----------------------------
1 DEPTNO NOT NULL NUMBER(2)
2 DNAMEX VARCHAR2(5)
--//依舊不行。視乎登入會設定正確的資料庫字符集。
$ echo $NLS_LANG
AMERICAN_AMERICA.US7ASCII
SYS@book> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@book> startup upgrade
ORACLE instance started.
Total System Global Area 643084288 bytes
Fixed Size 2255872 bytes
Variable Size 205521920 bytes
Database Buffers 427819008 bytes
Redo Buffers 7487488 bytes
Database mounted.
Database opened.
SYS@book> create or replace view scott.v_dept as select deptno,SUBSTR (dname, 1, 1) || '/' || SUBSTR (dname, 2, 1) dnamex from scott.dept;
View created.
SYS@book> @ desc scott.v_dept;
Name Null? Type
------ -------- ------------
1 DEPTNO NOT NULL NUMBER(2)
2 DNAMEX VARCHAR2(5)
5.繼續:
--//知道問題的原因,不過我覺得問題應該不大。即使這樣建立修改dba_obj_audit_opts檢視使用不應該存在問題。
$ export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
--//重啟資料庫略。
SYS@book> rename dba_obj_audit_opts to dba_obj_audit_opts_org;
Table renamed.
--//我在11g上測試scott不會報錯,可能它使用user_obj_audit_opts。而sys用報
--//the select privilege is required on DBA_OBJ_AUDIT_OPTS
SYS@book> @ /tmp/11g.txt
View created.
SYS@book> @ desc dba_obj_audit_opts
Name Null? Type
----------- -------- ------------
1 OWNER VARCHAR2(30)
2 OBJECT_NAME VARCHAR2(30)
3 OBJECT_TYPE VARCHAR2(23)
4 ALT VARCHAR2(5)
5 AUD VARCHAR2(5)
6 COM VARCHAR2(5)
7 DEL VARCHAR2(5)
8 GRA VARCHAR2(5)
9 IND VARCHAR2(5)
10 INS VARCHAR2(5)
11 LOC VARCHAR2(5)
12 REN VARCHAR2(5)
13 SEL VARCHAR2(5)
14 UPD VARCHAR2(5)
15 REF CHAR(3)
16 EXE VARCHAR2(5)
17 CRE VARCHAR2(5)
18 REA VARCHAR2(5)
19 WRI VARCHAR2(5)
20 FBK VARCHAR2(5)
--//再次使用toad並不影響使用。另外我的測試11g即使沒有它,報錯選擇ok可以繼續。檢視沒有問題,19c不行。
SYS@book> drop view dba_obj_audit_opts;
View dropped.
SYS@book> rename dba_obj_audit_opts_org to dba_obj_audit_opts;
Table renamed.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-2769429/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20180613]縮短欄位長度.txt
- MySQL的欄位數量以及長度限制MySql
- [20190312]檢視v$datafile欄位OFFLINE_CHANGE#, ONLINE_CHANGE#.txt
- EBS:物料搬運單檢視人限制(建立人欄位)
- [20200211]檢視v$db_object_cache的CHILD_LATCH欄位.txtObject
- MySQL如何檢視新增修改表以及欄位註釋資訊MySql
- oracle 修改表欄位的長度Oracle
- [20190810]如何索引一個超長欄位.txt索引
- Oracle 修改欄位型別和長度Oracle型別
- [20240911]檢視超長檢視的定義2.txt
- [20211206]toad下job建立檢視問題.txt
- postgresql中檢視建立,欄位拼接,同一個表的多行之間的多個欄位相減SQL
- [20210423]dump sga映像的對應塊.txt
- ORANCLE 資料已存在,修改欄位型別長度型別
- 欄位長度前後端是否都需要做限制?後端
- mysql的varchar欄位最大長度真的是65535嗎?MySql
- [20221216]建立修改表欄位統計資訊modcol.sql指令碼.txtSQL指令碼
- [20231020]增加欄位的問題.txt
- [20181020]lob欄位的索引段.txt索引
- DDL操作導致欄位長度變更修復方案
- MySQL-建立計算欄位MySql
- OGG複製同步,提示欄位長度不夠ORA-01704
- [20241021]使用gdb檢視修改記憶體地址以及相關值.txt記憶體
- [20200417]跟蹤特定sql語句以及v$open_cursor檢視.txtSQL
- MySQL中修改一個資料庫下包含有某個相同欄位的所有表的欄位長度MySql資料庫
- ORACLE 物化檢視維護中相關基表發生欄位長度類DDL變更後需要重建或者全量重新整理Oracle
- [BUG反饋]username欄位的長度設定有點小問題。
- [20181031]lob欄位與布隆過濾.txt
- SAP MM 物料主資料MRP2 檢視Rounding Value欄位
- SAP MM 物料主資料MRP2 檢視’Minimum Lot Size’欄位
- [20180503]檢視提示使用索引.txt索引
- [20210208]lob欄位與查詢的問題.txt
- [20190227]簡單探究tab$的bojb#欄位.txt
- [20181022]lob欄位的lobid來之那裡.txt
- [20200422]跟蹤特定sql語句以及v$open_cursor檢視(補充).txtSQL
- [20200417]跟蹤特定sql語句以及v$open_cursor檢視2.txtSQL
- MySQL 5.6使用pt-online-schema-change線上修改大表欄位長度MySql
- Laravel nova 建立動態資源配置欄位Laravel