開啓服務:先開啓Lisenterner服務 再開啓ORCL服務
oracle登錄 用戶:
- 管理員 sysDBA - 無密碼
- 系統用戶 system - manager
- 普通用戶 scott - tiger
進入oracle步驟:
- sqlplus scott/tiger
DOS窗口中用sqlplus命令,以scott用戶的身份登錄到oracle - conn sys/sys as sysdba;
以無密碼的系統管理員的身份重新連接(相當於SQLSERVER的windows身份驗證) - alter user 用戶名
- identified by 密碼; 更改用戶的密碼
show user;
查看當前登錄的用戶> 創建 create 刪除drop 修改alter
創建表空間: create tablespace
表空間名 datafile ‘物理存放路徑.dbf’
size 大小;create table 表名( 列名 數據類型 約束, 列名 數據類型 約束, 列名 數據類型 約束, .... );
數據類型:
- 數字:
number 可以存整數和小數,可以指定小數位數
number(P,S) P精度(小數+整數的位數) S小數位數
int 整數
float 小數- 非數字:
char(10) 固定 存儲數據時,不夠長度以空格填補,要存滿10個字節
varchar(10) 可變 存儲的內容實際的長度,不需要存滿10個字節
varchar2(長度) 同 varchar 4000個字符
long 可變的字符串 2GB
日期:date
序列:生成遞增的數字
同義詞共有兩種類型: 公有同義詞可被所有的數據庫用戶訪問。
私有同義詞只能在其模式內訪問,且不能與當前模式的對象同名。
CREATE (PUBLIC) SYNONYM 同義詞名 FOR 模式名.表名;注意:一個用戶對應一個模式
create sequence 序列名
start with 初始值
increment by 遞增;
maxvalue 最大值
minvalue 最小值
NOCYCLE/CYCLE
cache 緩存值;
緩存值不指定默認爲20,nocache緩存預先不分配值,緩存的值必須小於循環的值
nimvalue與循環(cycle)一起使用,指下次循環的開始值 start with 起始值 :第一次取值的起始值 序列取值:
序列名.nextVal 下一個值
序列名.currVal 當前值查詢: 條件查詢、聚合函數、分組查詢、連接查詢、子查詢
- 基本查詢
select 列信息 from 表名 where 條件 group by 分組列 having 分組後篩選 order by 排序列
acs/desc
多表查詢:內連接、外連接
子查詢:作爲條件、列、表
select … from … where … update 表 set 列=更新值 where (子查詢)
delete from 表 where (子查詢)
- 視圖:簡化SQL語句,實際存放的是查詢語句,不是數據,數據存放在源表中
CREATE [OR REPLACE] VIEW 視圖名
as
查詢語句
[with check option] 主要針對視圖的查詢語句帶條件,對視圖執行修改操作時,不允許使視圖的查詢結果行數變少
[with read only] 只讀
- 索引:提高查詢的速度
主鍵列默認添加索引
(1).標準的索引:索引添加在經常搜索的列上
create index 索引名 on 表名(列名);
(2).唯一索引:索引列值不重複
create unique index 索引名 on 表名(列名);
(3)、組合索引:經常按照多列搜索,則可以在多列上創建一個索引
create index 索引名 on 表名(列名1,列名2);
(4)、反向鍵索引:列值連續
通常索引是建立在連續增長的列上,使數據均勻地分佈在整個索引上,索引存儲在硬盤上是以塊的形式存儲的,
如果數據的修改導致順序發生改變,則系統會鎖定修改記錄所在的數據塊,這樣同一個塊中的數據要發生操作必須等待, 大大降低了併發性
反向鍵索引就是反轉索引列中的每一個字節,使數據分散的存放到磁盤不同的塊上,提高數據訪問的併發性 將反轉後的鍵按照常規索引存儲
語法:CREATE INDEX 索引名 ON 表名 (列名) REVERSE;
(5)、位圖索引:列值大量重複
語法:CREATE BITMAP INDEX 索引名 ON 表名 (列名);
PL/SQL 是過程語言(Procedural Language)與結構化查詢語言(SQL)結合而成的編程語言 PL/SQL 是對 SQL
的擴展 支持多種數據類型,如大對象和集合類型,可使用條件和循環等控制結構 可用於創建存儲過程、觸發器和程序包,給SQL語句的執行添加程序邏輯
與 Oracle 服務器和 Oracle 工具緊密集成,具備可移植性、靈活性和安全性優點: 1、可以編寫邏輯代碼 2、PL/SQL中的代碼自動形成一個事物,出現異常就會一起回滾
3、更佳的性能,減少客戶端對ORACLE服務器端的訪問量,PL/SQL 經過編譯執行的
存儲過程
存儲過程(procedure):命名的PL/SQL代碼快,類似JAVA的方法 一個功能定義到一個存儲過程中,需要使用時直接調用
CREATE OR REPLACE PROCEDURE PRO_NAME
AS
BEGIN
[EXCEPTION]
END;
條件結構
IF 條件 THEN
語句;
ELSIF 條件 THEN
語句;
ELSIF 條件 THEN
語句;
....
ELSE
語句N;
END IF;
根據指定的學號查詢的學生的信息,如果存在輸出學生信息,不存在提示對應的信息
帶參數的存儲過程
CREATE OR REPLACE PROCEDURE PROC1(id student.stuid%type)
AS
--變量與表中的一行數據進行映射,語法:變量名 表名%rowtype;
stu student%rowtype;
num int; --存放根據學號查詢的記錄行數
begin
select count(*) into num from student where stuid=id;
--判斷
if num=0 then
dbms_output.put_line('學號不存在!');
else
select * into stu from student where stuid=id;
dbms_output.put_line(stu.stuid||'-'||stu.stuname);
end if;
end proc1;
--調用存儲過程並傳參數
call proc1(0);
循環
LOOP循環
LOOP
EXIT WHEN 退出循環的條件表達式;
執行語句;
END LOOP;
循環輸出1-10
create or replace procedure proc1
as
i int:=1; --定義變量並賦初值
begin
LOOP
EXIT WHEN I>10;
dbms_output.put_line(I);
I:=I+1;
END LOOP;
end proc1;
CALL PROC1();
WHILE循環
WHILE 循環語法:
WHILE 進行循環條件
LOOP
執行語句;
END LOOP;
create or replace procedure proc1
as
i int:=1; --定義變量並賦初值
begin
WHILE i<=10
LOOP
dbms_output.put_line(I);
I:=I+2;
END LOOP;
end proc1;
for循環
FOR 變量 IN 起始值..結束值
LOOP
執行語句;
END LOOP;
create or replace procedure proc1
as
begin
for i in 1..10
loop
dbms_output.put_line(I);
end loop;
end;
–
定義存儲過程向學生信息表添加20行測試數據
create or replace procedure proc1
as
begin
for i in 1..20
loop
insert into student values(i,'測試'||i,'男',20,1.68,sysdate);
end loop;
end;
–
判斷某張表是否存在,如果存在就刪除
CREATE OR REPLACE PROCEDURE CHECKTABLE(TABLENAME VARCHAR)
AS
NUM INT;
BEGIN
SELECT COUNT(*) INTO NUM FROM USER_TABLES WHERE TABLE_NAME=TABLENAME;
IF NUM>0 THEN
--刪除表
--DROP TABLE TABLENAME;
EXECUTE IMMEDIATE 'DROP TABLE '||TABLENAME;
END IF;
END;
注意:PL/SQL中不支持DDL語句:create drop,需要使用命令 EXECUTE IMMEDIATE ‘DDL語句’ 執行