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