2011-09-30 20 views
0

我創造了我做只讀如何使只有

create view EMP_VU AS 
select ename employee_name, deptno, empno 
from emp 
with READ ONLY CONSTRAINT EMP_VU_Read_ONLY; 

如何使只有它不能讀取圖的圖不讀?

我得到這個錯誤,當我嘗試插入信息到視圖中,所以我假設這是我的問題,只讀。

SQL> insert into EMP_VU (employee_n,deptno, empno) 
    values (Stutte, 40, 8888); 
    values (Stutte, 40, 8888) 
      * 
    ERROR at line 2: 
    ORA-00984: column not allowed here 

我做出了改變繼承人的新的錯誤,我得到

SQL> insert into EMP_VU (employee_name, deptno, empno) 
    values ('Stuttle', '40', '8888'); 
    insert into EMP_VU (employee_name, deptno, empno) 
    * 
    ERROR at line 1: 
    ORA-00001: unique constraint (CIS605.EMP_EMPNO_PK) violated 

繼承人的查看

SQL> select * from EMP_VU; 

EMPLOYEE_N  DEPTNO  EMPNO 
---------- ---------- ---------- 
KING    10  7839 
BLAKE    30  7698 
CLARK    10  7782 
JONES    20  7566 
MARTIN    30  7654 
ALLEN    30  7499 
TURNER    30  7844 
JAMES    30  7900 
WARD    30  7521 
FORD    20  7902 
SMITH    20  7369 

EMPLOYEE_N  DEPTNO  EMPNO 
---------- ---------- ---------- 
SCOTT    20  7788 
ADAMS    20  7876 
MILLER    10  7934 

14 rows selected. 
+0

您仍然可以插入視圖。 – Randy

+2

是的,我強烈建議視圖僅用於閱讀。但是,在SQL Server中,實際上可以將數據插入到視圖中,但前提是視圖引用了1個表。不確定Oracle是否屬於這種情況。無論如何,在這種情況下,問題似乎是「stutte」沒有用引號包裹,所以它認爲它是一個列,而不是一個字符串,因此錯誤「Column not allowed here」。 –

+0

我的問題是如何使它不能只讀? – Randy

回答

2

你的錯誤信息是違反了主鍵。您正在使用已存在的主鍵插入數據。從密鑰的名稱,它是abotu僱員號碼。

總之,請不要插入與任何現有記錄相同的員工編號的記錄?


我也注意到,在一個查詢你沒有aroudn你的字符串員工姓名引號。而在另一個你有引號圍繞數字值。

您需要確定每列的數據類型,並只在需要的地方使用引號。 (字符串和日期,但不是數字)