PL-SQL筆記1_OracleOracle Database 21c Express Edition下載安裝筆記
免費的甲骨文資料庫Oracle Database
在Oracle 21c版本中,由於安全原因,已不再默認安裝Scott帳號和演示資料庫。
範例資料庫
在 Oracle 中,Schema 與Database之間
每個 Schema 都屬於一個特定的數據庫,而每個數據庫可以包含多個 Schema。
一個數據庫是由多個 Schema 構成的,而每個 Schema 可以包含多個數據庫對象(如表格、視圖、索引等)。當用戶在數據庫中創建對象時,這些對象會被分配到特定的 Schema 中,用戶可以對這些對象進行管理和控制。
Schema 是一個邏輯上獨立的數據庫對象集合,由一個用戶(或多個用戶)擁有。每個Schema可以包含表格、視圖、索引、序列、函數、程序等對象。透過Schema的概念,Oracle 可以將數據庫對象的管理和控制權限進行分離,實現多個用戶對同一個數據庫實例進行管理。
使用Schema的好處是,可以讓不同用戶在同一數據庫中擁有自己的對象集合,以及管理和控制這些對象的權限。在Oracle中,一個用戶可以擁有多個Schema,也可以共享一個Schema。當用戶創建數據庫對象時,Oracle會自動將這些對象分配到對應的Schema中,並為這些對象設置相應的權限和屬性。
練習產生新的schema
有可能會出錯 這是12c以後版本的特徵
ORA-65096: 無效的通用使用者或角色名稱
Create user SCOTT identified by tiger;
GRANT CONNECT, RESOURCE TO SCOTT;
登到SCOTT帳號中並建立table相關約束、測試資料
connect SCOTT/tiger
show user;
CREATE TABLE DEPT
(DEPTNO NUMBER(2) CONSTRAINT PK_DEPT PRIMARY KEY,
DNAME VARCHAR2(14) ,
LOC VARCHAR2(13) ) ;
CREATE TABLE EMP
(EMPNO NUMBER(4) CONSTRAINT PK_EMP PRIMARY KEY,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7,2),
COMM NUMBER(7,2),
DEPTNO NUMBER(2) CONSTRAINT FK_DEPTNO REFERENCES DEPT);
INSERT INTO DEPT VALUES
(10,'ACCOUNTING','NEW YORK');
--------------------------------------------------------------
CREATE TABLE BONUS
(
ENAME VARCHAR2(10) ,
JOB VARCHAR2(9) ,
SAL NUMBER,
COMM NUMBER
) ;
CREATE TABLE SALGRADE
( GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER );
--------------------------------------------------------------
INSERT INTO DEPT VALUES (20,'RESEARCH','DALLAS');
INSERT INTO DEPT VALUES
(30,'SALES','CHICAGO');
INSERT INTO DEPT VALUES
(40,'OPERATIONS','BOSTON');
INSERT INTO EMP VALUES
(7369,'SMITH','CLERK',7902,to_date('17-12-1980','dd-mm-yyyy'),800,NULL,20);
INSERT INTO EMP VALUES
(7499,'ALLEN','SALESMAN',7698,to_date('20-2-1981','dd-mm-yyyy'),1600,300,30);
INSERT INTO EMP VALUES
(7521,'WARD','SALESMAN',7698,to_date('22-2-1981','dd-mm-yyyy'),1250,500,30);
INSERT INTO EMP VALUES
(7566,'JONES','MANAGER',7839,to_date('2-4-1981','dd-mm-yyyy'),2975,NULL,20);
INSERT INTO EMP VALUES
(7654,'MARTIN','SALESMAN',7698,to_date('28-9-1981','dd-mm-yyyy'),1250,1400,30);
INSERT INTO EMP VALUES
(7698,'BLAKE','MANAGER',7839,to_date('1-5-1981','dd-mm-yyyy'),2850,NULL,30);
INSERT INTO EMP VALUES
(7782,'CLARK','MANAGER',7839,to_date('9-6-1981','dd-mm-yyyy'),2450,NULL,10);
INSERT INTO EMP VALUES
(7788,'SCOTT','ANALYST',7566,to_date('13-JUL-87','dd-mm-rr')-85,3000,NULL,20);
INSERT INTO EMP VALUES
(7839,'KING','PRESIDENT',NULL,to_date('17-11-1981','dd-mm-yyyy'),5000,NULL,10);
INSERT INTO EMP VALUES
(7844,'TURNER','SALESMAN',7698,to_date('8-9-1981','dd-mm-yyyy'),1500,0,30);
INSERT INTO EMP VALUES
(7876,'ADAMS','CLERK',7788,to_date('13-JUL-87', 'dd-mm-rr')-51,1100,NULL,20);
INSERT INTO EMP VALUES
(7900,'JAMES','CLERK',7698,to_date('3-12-1981','dd-mm-yyyy'),950,NULL,30);
INSERT INTO EMP VALUES
(7902,'FORD','ANALYST',7566,to_date('3-12-1981','dd-mm-yyyy'),3000,NULL,20);
INSERT INTO EMP VALUES
(7934,'MILLER','CLERK',7782,to_date('23-1-1982','dd-mm-yyyy'),1300,NULL,10);
--------------------------------------------------------------
INSERT INTO SALGRADE VALUES (1,700,1200);
INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
---------
COMMIT;
在塞入測資時候可能會出現
ORA-01950: 沒有表格空間 'USERS' 的權限
ORA-01950: no privileges on tablespace 'XXXXX'
可針對修改表空間給予相應權限:alter user username quota umlimited on tablespacename;
或者 grant resource to username 也可以
因為grant resource to username 時自動獲得了有unlimited tablespace 的系統權限
遵循最小權限原則
用第一種方式
要先在切到最高權限帳號去
alter user SCOTT quota unlimited on “USERS”;
那table 結構都產生只是目前都沒有成功insert半筆再補執行即可。
或是把全部table drop 再重新跑整個script
全部要drop的table可以跑
SELECT 'DROP TABLE "' || TABLE_NAME || '" CASCADE CONSTRAINTS;' FROM user_tables;
那這句可以盤出要執行共有哪些才刪除的乾淨
error: ORA-65096: invalid common user or role name in Oracle database
ORA-65096: 公用用戶名或角色名無效
Drop all tables in Oracle DB (scheme)
留言
張貼留言