oracle一般人能不能学,Oracle人门学习笔记
1.如何顯示當(dāng)前用戶是誰(shuí)?
show user;
2.進(jìn)入sql*plus管理工具,運(yùn)行里面輸入
sqlplusw就可以了。
3.disc斷開(kāi)當(dāng)前數(shù)據(jù)庫(kù)的連接
4.passw修改密碼命令
示例:passw 回車
更改snapall的口令
舊口令:*******
新口令:******
重新鍵入新口令:******
口令已更改
5.如何在忘掉用戶密碼的情況下修改密碼。
alter user sys identified by snapall;
6.ping命令的其他技巧:在一般情況下還可以通過(guò)
ping對(duì)方讓對(duì)方返回給你的TTL值大小,粗略的判斷
目標(biāo)主機(jī)的系統(tǒng)類型是Windows系列還是UNIX/Linux
系列,一般情況下Windows系列的系統(tǒng)返回的TTL值
在100-130之間,而UNIX/Linux系列的系統(tǒng)返回的
TTL值在240-255之間,當(dāng)然TTL的值在對(duì)方的主機(jī)里
是可以修改的,Windows系列的系統(tǒng)可以通過(guò)修改注
冊(cè)表以下鍵值實(shí)現(xiàn)。
7.文件操作命令
a.start和@打開(kāi)
sql>@ d:/1.sql
sql>start d:/1.sql
b.edit編輯
sql>edit d:/1.sql
c.spool將sql*plus上的內(nèi)容輸出到指定文件中去
sql>spool d:/1.sql并輸入sql>spool off
8.linesize設(shè)置顯示行的寬度,默認(rèn)是80
show linesize;
set linesize 90;
pagesize設(shè)置每頁(yè)顯示行的數(shù)目,默認(rèn)是14
用法與linesize一樣
9.授權(quán)和收回權(quán)限(系統(tǒng)權(quán)限是不會(huì)級(jí)聯(lián)回收的,對(duì)
象權(quán)限會(huì)級(jí)聯(lián)回收的)
grant connect to user;
grant select on emp to xiaoming;給小明賦予
查詢當(dāng)前用戶的下的emp表的權(quán)限。
revoke connect to user;
revoke select on emp from xiaoming
如果有其它權(quán)限,收回select不會(huì)對(duì)其它權(quán)限由
影響。
10.resource這個(gè)權(quán)限可以在任意表空間下面建表。
11.如果是對(duì)象權(quán)限:
如果想讓用戶有賦予權(quán)限的權(quán)限,可以在后面添加
with grant option;
例如:grant select on emp to xiaoming with
grant option;
如果是系統(tǒng)權(quán)限
添加with admin option;
12.用戶登陸次數(shù)太多會(huì)被限制。
創(chuàng)建profile文件
create profile lock_account limit
failed_login_attempts 3 password_lock_time 1;
alter user xiaoming lock_account;
13.要求用戶定期更改密碼
create profile myprofile limit
password_life_time 10 password_grace_time 2;
aler user xiaoming profile myprofile;
要求用戶每10天去修改密碼,寬限期為2天。
14.當(dāng)不需要profile時(shí),可以去刪除。
drop profile myprofile cascade;
15.如何查看一個(gè)表的結(jié)構(gòu)
desc 表名;
改一個(gè)表的名字
rename 舊表名 to 新表名;
16.oracle默認(rèn)的日期格式是'09-6月-99'
表示是1999年6月9號(hào)。
可以更改數(shù)據(jù)庫(kù)日期的默認(rèn)格式。
alter session set nls_date_fromat='yyyy-
mm-dd';
17.delete 語(yǔ)句刪除后可以恢復(fù);
先savepoint aa;
然后delete;
然后rollback to aa;
18.清頻命令
clear
19.使用列的別名排序
select ename,sal*12 "年薪" from emp order by
"年薪" asc;
列名需要使用雙引號(hào)圈中
20.如何取消重復(fù)行
select distinct deptno,job from demp;
21.打開(kāi)顯示操作時(shí)間的開(kāi)關(guān)
set timing on;
22.瘋狂復(fù)制法
insert into users (userid,username) select
* from users;
然后不斷執(zhí)行;
23.oracle對(duì)字段里面的內(nèi)容是區(qū)分的,對(duì)字段本身
不區(qū)分。
24.如何處理NULL值
使用nvl函數(shù)
select sal*13+nvl(comm,0)*13 from emp;
25.用查詢結(jié)果創(chuàng)建表
create tabel mytable1(id,name,sal) as select
empno,ename,sal form emp;
26.union命令
將兩個(gè)查詢出來(lái)的集合并,重復(fù)的只保留一條數(shù)據(jù)
。
union all 命令
將兩個(gè)查詢出來(lái)的集合并,重復(fù)的也都保留原有數(shù)
目。
intersect 命令
取交集
minus 命令
取差集,用前面那個(gè)查詢結(jié)果減去后面那個(gè)查詢合
集。
27.to_date函數(shù)
插入時(shí)間格式,to_date('1988-12-2','yyyy-mm-
dd');
默認(rèn)格式為2-12月-1988,不要用函數(shù)來(lái)表示。
28.update 語(yǔ)句跟新數(shù)據(jù)技巧
update emp set (job,sal,comm)=(select
job,sal,comm from emp where ename='SMITH')
where ename='SCOTT';
29.創(chuàng)建保存點(diǎn)命令
savepoint a1;
回退命令;
rollback to a1;
回退全部事務(wù)
rollback
注意:一旦提交commit;原來(lái)的保存點(diǎn)就沒(méi)有了
,也就無(wú)法回退。
30.只讀事務(wù):只是允許執(zhí)行查詢,不能執(zhí)行其他
dml操作。設(shè)置了只讀事務(wù)后,其它會(huì)話更改信息,
也不會(huì)對(duì)當(dāng)前的只讀事務(wù)由影響。
命令如下:set transaction read only;
31.字符函數(shù)
lower(char):將字符串轉(zhuǎn)化為小寫的格式。
upper(char):將字符串轉(zhuǎn)化為大寫的格式。
length(char):返回字符串的長(zhǎng)度。
substr(char,m,n):取字符串的字串。m代表從第幾
個(gè)開(kāi)始取,n代表取的字符個(gè)數(shù)。
select upper(substr(ename,1,1))||lower
(substr(ename,2,length(ename)-1)) from emp;
replace(char1,search_string,replace_string)
替換函數(shù)
32.數(shù)字函數(shù)
round(n,[m])該函數(shù)用于執(zhí)行四舍五入,如果省掉
mround(n),則四舍五入到整數(shù);如果m是正數(shù),則
四舍五入到小數(shù)點(diǎn)的m位后,如果m是負(fù)數(shù),則四舍
五入到小數(shù)點(diǎn)的m位前。
trunc(n,[m])該函數(shù)用于截取數(shù)字,如果省掉m,就
截取小數(shù)部分,如果m是正數(shù)就截取到小數(shù)點(diǎn)的m位
后,如果m是負(fù)數(shù),則截取到小數(shù)點(diǎn)的前m位。
mod(m,n)
floor(n)返回小于或是等于n的最大整數(shù)。
ceil(n)返回大于或是等于n的最小整數(shù)。
dual表是一個(gè)測(cè)試表,用了做測(cè)試的。
33. 日期函數(shù)
sysdate()------返回系統(tǒng)時(shí)間
add_months(d,n)
last_day(d): 返回d日期的月的最后一天
34.轉(zhuǎn)換函數(shù)
to_char()
to_char(sal,'L99999.99');
to_char(hiredate,'yyyy-mm-dd hh24:mi:ss')
35.系統(tǒng)函數(shù)
sys_context
teminal:當(dāng)前會(huì)話客戶所對(duì)應(yīng)的終端的標(biāo)示符
lanuage:語(yǔ)言
db_name:當(dāng)前數(shù)據(jù)庫(kù)的名稱
nls_date_format:當(dāng)前會(huì)話客戶所對(duì)應(yīng)的日期格式
session_user:當(dāng)前會(huì)話客戶所對(duì)應(yīng)的數(shù)據(jù)庫(kù)用戶名
current_schema:當(dāng)前會(huì)話客戶所對(duì)應(yīng)的默認(rèn)的方案
名
例如:想查詢當(dāng)前用的是哪個(gè)數(shù)據(jù)庫(kù)
select sys_context('USERENV','db_name') from
dual;
host:返回?cái)?shù)據(jù)庫(kù)所在主機(jī)的名稱
36.普通dba沒(méi)有startup 和shutdown權(quán)限。
37.用戶名,權(quán)限,角色
查詢dba_user可以顯示所有數(shù)據(jù)庫(kù)用戶的詳細(xì)信息
查詢數(shù)據(jù)字典視圖dba_sys_privs,可以顯示用戶所
具有的系統(tǒng)權(quán)限;
查詢數(shù)據(jù)字典視圖dba_tab_privs可以顯示用戶具有
的對(duì)象權(quán)限;
查詢數(shù)據(jù)字典視圖dba_col_privs可以顯示用戶具有
的列權(quán)限;
查詢數(shù)據(jù)字典視圖dba_role_privs可以顯示用戶具
有的角色;
38.
查詢數(shù)據(jù)庫(kù)有多少種角色?
select * from dba_roles;
一般預(yù)先定義為25個(gè)
查詢數(shù)據(jù)庫(kù)中所有的系統(tǒng)權(quán)限,一般是dba
select * from system_privilege_map order by
name;
查詢數(shù)據(jù)庫(kù)中所有的對(duì)象權(quán)限,一般是dba
select distinct privilege from dba_tab_privs;
查詢數(shù)據(jù)庫(kù)的表空間
select tablespace_name form dba_tablespace;
如何查詢一個(gè)角色包括的權(quán)限?
a.一個(gè)角色包含的系統(tǒng)權(quán)限
select * from dba_sys_privs where
grantee='CONNECT';
或者
select * from role_sys_privs where role='';
b.一個(gè)角色包含的對(duì)象權(quán)限
select * from dba_tab_privs where
grantee='CONNECT';
如何查看某個(gè)用戶具有什么用的角色?
select * from dba_role_privs where
grantee='';
顯示當(dāng)前用戶可以訪問(wèn)的所有數(shù)據(jù)字典視圖
select * from dict where comments like '%
grant%';
顯示當(dāng)前數(shù)據(jù)庫(kù)的全稱
select * from global_name;
39.改變表空間的狀態(tài)
1.使表空間脫機(jī)
alter tablespace 表空間名字|offline;
2.使表空間聯(lián)機(jī)
alter tablespace 表空間名字 online;
3.只讀表空間
當(dāng)設(shè)置為只讀是,就不能進(jìn)行修改操作(但是系統(tǒng)
表空間無(wú)法改為只讀狀態(tài))
alter tablespace 表空間名字 read only;
4.設(shè)置表空間為可讀可寫
alter tablespace 表空間名字 read write;
40.
1.如果知道表空間名字,想顯示該表空間的的所有
表
select * from all_tables where
tablespace_name='表空間名字';
2.如果知道表名,想查看該表屬于哪個(gè)表空間
select tablespace_name,table_name from
user_tables where table_naem='表名';
3.刪除表空間
drop tablespace '表空間' including contents
and datafiles;
41.移動(dòng)數(shù)據(jù)文件
假如說(shuō)一塊磁盤的一部分磁道被損壞了,改數(shù)據(jù)文
件不能使用了,為了能夠重新使用,需要將這些文
件的副本移動(dòng)到其他磁盤,然后恢復(fù)。
1.確定數(shù)據(jù)文件所在的表空間
select tablespace_name from dba_data_files
where file_name='數(shù)據(jù)文件的路徑';
2.使表空間脫機(jī)
確保數(shù)據(jù)文件的一致性,將表空間轉(zhuǎn)變?yōu)閛ffline的
狀態(tài)。
alter tabespace 表空間名字 offline;
3.使用命令移動(dòng)數(shù)據(jù)文件到指定的目標(biāo)位置
host move 損壞數(shù)據(jù)文件的路徑 新的數(shù)據(jù)文件的路
徑;
4.執(zhí)行alter tablespace命令
在物理上移動(dòng)了數(shù)據(jù)文件后,還必須一致性命令對(duì)
數(shù)據(jù)文件作邏輯的修改;
alter tablespace 表空間名 rename datafile
'原來(lái)的數(shù)據(jù)文件路徑' to '新的數(shù)據(jù)文件路徑';
5.是表空間聯(lián)機(jī)
alter tablespace 表空間名 online;
42.
1.顯示表空間的信息
select tablespace_name from dba_tablespaces;
2.顯示表空間所包含的數(shù)據(jù)文件
select file_name,bytes form dba_date_files
where tablespace_name=='表空間名';
43.約束:約束用于確保數(shù)據(jù)庫(kù)數(shù)據(jù)滿足特定的商業(yè)
規(guī)則。在oracle中,約束包括:not null(非
空),unique(唯一,該列不能重復(fù),但是可以為空
),primary key(主鍵,該列不能重復(fù),而且不能
為null),foreign key(外鍵)和check(限制條件
)五種。
如果在建表時(shí)忘記建立必要的約束,可以在建表后
用alter table命令來(lái)為表增加約束,但是要注意,
增加not null約束時(shí),需要 使用modify選項(xiàng),而增
加其他四種約束使用add選項(xiàng)。
例如:alter table jacky modify 字段名 not
null;
alter table jacky add constraint 約束名
unique(字段名);
alter table jacky add constraint 約束名
check(字段名 in ('zon','df','dfs'));
如何刪除約束?
alter table 表名 drop constraint 約束名;
有些主鍵要?jiǎng)h除,可能有外鍵的關(guān)系,無(wú)法刪除,
要用如下命令:
alter table 表名 drop primary key cascade;
如何顯示約束信息
1.顯示約束信息
select
constraint_name,constraint_type,status,valida
ted from user_constraints where table_name='
表名';
2.顯示約束列
select column_name,position form
user_cons_columns where constraint_name='約束
名';
44.索引
create index emp_index on emp(ename,job);
create index emp_index on emp(job,ename);
這兩個(gè)索引時(shí)不同的。
45.權(quán)限
系統(tǒng)權(quán)限不是級(jí)聯(lián)回收的。
對(duì)象權(quán)限是級(jí)聯(lián)回收的。
46.角色
創(chuàng)建角色。
create role myrole1 not identified;
給空的角色賦予權(quán)限
grant create session to 角色名 with admin
option;
分配角色給用戶
grant 角色名 to 用戶名 with admin option;
刪除角色
drop role 角色名;
問(wèn):如果一個(gè)角色被刪除,那被分配這個(gè)角色的用
戶還有權(quán)限嗎?
答:用戶權(quán)限沒(méi)有了。
精細(xì)訪問(wèn)控制
47.PLSQL編程
PLSQL是oralce在標(biāo)準(zhǔn)的sql語(yǔ)言上的額擴(kuò)展。
1.創(chuàng)建一個(gè)存儲(chǔ)過(guò)程
create table mytest(name varchar2(30),passwd
varchar2(30));
create or replace procedure jacky219 is
begin
--執(zhí)行部分
insert into mytest values('殷志剛','123');
commit;
end;
/
如何查看錯(cuò)誤信息
show error;
如何調(diào)用過(guò)程
1.exec 過(guò)程名(參數(shù)1,參數(shù)2...)
2.call 過(guò)程名(參數(shù)1,參數(shù)2...)
編寫規(guī)范
1.注釋
單行注釋 --
select * from emp;--取得員工信息
多行注釋
/*...*/來(lái)劃分
2.標(biāo)示符號(hào)的命名規(guī)范
1)當(dāng)定義變量時(shí),建議用v_作為前綴,例如v_sal
2)當(dāng)定義常量時(shí),建議用c_作為前綴
3)當(dāng)定義游標(biāo)時(shí),建議用_cursor作為后綴;
4)當(dāng)定義例外時(shí),建議用e_作為前綴;
包含定義部分和執(zhí)行部分的pl/sql快
declare
v_ename varchar2(5);--定義字符串變量
begin
select ename into v_ename from emp where
empno=&no;
dbms_output.put_line('雇員
名:'||v_ename);
end;
/
重要:其中into代表將查詢出來(lái)的值插入到v_ename
中去,&代表是要我們要從控制臺(tái)輸入值進(jìn)去。
||代表是連接符。no只是隨便是個(gè)變量名,可以用
aaa,bbb都可以。
48.函數(shù)
函數(shù)用于返回特定的數(shù)據(jù),一般返回一個(gè)值。
例:
輸入雇員的姓名,返回該雇員的年薪
create function sp_fun2(spName varchar2)
return number is yearSal number(7,2);
begin
select sal*12+nvl(comm,0)*12 into yearSal
from emp where ename=spName;
return yearSal;
end;
在sqlplus中調(diào)用函數(shù)的方法
var income number
call sp_fun2('殷志剛') into:income;
print income
1.包
包用于邏輯上組合過(guò)程和函數(shù)。
創(chuàng)建一個(gè)包,聲明了該包有一個(gè)過(guò)程和一個(gè)函數(shù)
create package sp_package is
procedure update_sal(name
varchar2,newsal number);
function annual_income(name varchar2)
returen number;
end;
2.給包 sp_package實(shí)現(xiàn)包體
create package body sp_package is
procedure update_sal(name varchar2,newsal
number)
is
begin
update emp set sal=newsal where ename=name;
end;
function annual_income(name varchar2)
return number is
annual_salary number;
begin
select sal*12+nvl(comm,0) into annual_salary
from emp
where ename=name;
return annual_salary;
end;
end;
3.如何調(diào)用包的過(guò)程或是函數(shù)
exec sp_package.update_sal('SCOTT','120');
49.觸發(fā)器
觸發(fā)器是指隱含的執(zhí)行的存儲(chǔ)過(guò)程。當(dāng)定義觸發(fā)器
時(shí),必須要指定觸發(fā)的事件和觸發(fā)的操作,常用的
觸發(fā)事件包括insert,update,delete語(yǔ)句,而觸發(fā)
操作實(shí)際就是一個(gè)pl/sql快??梢杂胏reate
trigger來(lái)建立觸發(fā)器。
50.變量
1.定義標(biāo)量
1.1定義一個(gè)變長(zhǎng)的字符串
v_ename varchar2(10);
1.2定義一個(gè)小數(shù) 范圍-9999.99-9999.99
v_sal number(6,2);
1.3定義一個(gè)小數(shù)并給一個(gè)初始值為5.4:=是pl/sql
的賦值號(hào)
v_sal2 number(6,2):=5.4
1.4定義一個(gè)日期類型的數(shù)據(jù)
v_hiredate date;
1.5定義一個(gè)布爾變量,不能為空,初始值為false
v_valid boolean not null default false;
%type類型
val_jacky emp.ename%type;表示變量val_jacky和
表emp中的字段ename,的長(zhǎng)度為標(biāo)準(zhǔn),這樣就不會(huì)出
現(xiàn)長(zhǎng)度不夠的情況。
2.符合變量
用于存放多個(gè)值的變量,主要包括
pl/sl記錄,pl/sql表,嵌套表和varray(動(dòng)態(tài)表)
3.復(fù)合類型的pl/sql表
相當(dāng)于高級(jí)語(yǔ)言的數(shù)組。
4.參照變量-ref cursor游標(biāo)變量
例如:使用pl/sql編寫一個(gè)快,可以輸入部門號(hào),
并顯示該部門所有員工的姓名和他的工資。
declare
type sp_emp_cursor is ref cursor;
test_cursor sp_emp_cursor;
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
open test_cursor for select ename,sal from
emp where deptno=&no;
loop
fetch test_cursor into v_ename,v_sal;
//update emp set sal:=sal+100 where
sal<200 and ename=v_ename;
exit when test——cursor%notfound;
dbms_output.put_line('名字:'||v_ename||'
工資:'||v_sa;);
end loop;
end;
51.控制結(jié)構(gòu)
1.if then endif;
2.if then else endif;
3.if then elsif then else endif;
4.循環(huán)語(yǔ)句
4.1 loop end loop;
4.2 while..loop end loop;
4.3基本for循環(huán)
4.4goto語(yǔ)句,跳轉(zhuǎn);跳轉(zhuǎn)的語(yǔ)句必須加《》
4.5輸出語(yǔ)句開(kāi)關(guān):set serveroutput on;打開(kāi)
set serveroutput off;關(guān)閉
52.編寫分頁(yè)過(guò)程
1.將一個(gè)表中的記錄編號(hào),
select t1.*,rownum rn from (select * fromo
emp) t1;
2.可以按照每10條來(lái)取。
select t1.*,rownum rn from (select * fromo
emp) t1 where rownum<1=0;
3.取第6條到第10條的語(yǔ)法
select * from
(select t1.*,rownum rn from (select * fromo
emp) t1 where rownum<10;)
where rn>=6;
4.分頁(yè)的過(guò)程代碼
create or replace procedure fenye
(tableName in varchar2,
Pagesize in number,
pageNow in number,
myrows out number,
mypageCount out number,
p_cursor out tespackage.test_cursor
) is
v_sql varchar2(1000);
v_begin number:=(pageNow-1)*Pagesize+1;
v_end number:=pageNow*Pagesize;
begin
v_sql:='select * from (select t1.*,rownum rn
from(select * from '|| tableName||') t1 where
rownum<='||v_end||' ) where rn>='||v_begin;
open p_cursor for v_sql;
v_sql:='select count(*) from '||tableName;
execute immediate v_sql into myrows;
if mod(myrows,Pagesize)=0 then
myPageCount:=myrows/Pagesize;
else
myPageCount=myrows/Pagesize+1;
end if;
end;
53.視圖
視圖是一個(gè)虛擬表,其內(nèi)容友查詢定義。
1.視圖不占用磁盤空間
2.視圖不能建索引
3.視圖可以簡(jiǎn)化 復(fù)雜查詢
4.視圖可以提高安全性
創(chuàng)建視圖
create view 視圖名 as select語(yǔ)句 [with read
only(假如添加了這個(gè),那這個(gè)視圖就不能被修改)]
創(chuàng)建或者修改視圖
create or replace 視圖名 as select語(yǔ)句[with
read only];
刪除視圖
drop view 視圖名;
總結(jié)
以上是生活随笔為你收集整理的oracle一般人能不能学,Oracle人门学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: java货物进销管理系统_java实验
- 下一篇: maya材质sheen_maya怎样做耐