Oracle WDP 全稱為Oracle Workforce Development Program,是Oracle (甲骨文)公司專門面向學生、個人、在職人員等羣體開設的職業發展力課程。下面是小編整理的關於oracle的sql語句,歡迎大家參考!
首先,以超級管理員的身份登錄oracle
sqlplus sys/bjsxt as sysdba
--然後,解除對scott用户的鎖
alter user scott account unlock;
--那麼這個用户名就能使用了。
--(默認全局數據庫名orcl)
1、select ename, sal * 12 from emp; --計算年薪
2、select 2*3 from dual; --計算一個比較純的數據用dual表
3、select sysdate from dual; --查看當前的系統時間
4、select ename, sal*12 anuual_sal from emp; --給搜索字段更改名稱(雙引號 keepFormat 別名有特殊字符,要加雙引號)。
5、--任何含有空值的數學表達式,最後的計算結果都是空值。
6、select ename||sal from emp; --(將sal的查詢結果轉化為字符串,與ename連接到一起,相當於Java中的字符串連接)
7、select ename||'afasjkj' from emp; --字符串的連接
8、select distinct deptno from emp; --消除deptno字段重複的值
9、select distinct deptno , job from emp; --將與這兩個字段都重複的值去掉
10、select * from emp where deptno=10; --(條件過濾查詢)
11、select * from emp where empno > 10; --大於 過濾判斷
12、select * from emp where empno <> 10 --不等於 過濾判斷
13、select * from emp where ename > 'cba'; --字符串比較,實際上比較的是每個字符的AscII值,與在Java中字符串的比較是一樣的
14、select ename, sal from emp where sal between 800 and 1500; --(between and過濾,包含800 1500)
15、select ename, sal, comm from emp where comm is null; --(選擇comm字段為null的數據)
16、select ename, sal, comm from emp where comm is not null; --(選擇comm字段不為null的數據)
17、select ename, sal, comm from emp where sal in (800, 1500,2000); --(in 表範圍)
18、select ename, sal, hiredate from emp where hiredate > '02-2月-1981'; --(只能按照規定的格式寫)
19、select ename, sal from emp where deptno =10 or sal >1000;
20、select ename, sal from emp where deptno =10 and sal >1000;
21、select ename, sal, comm from emp where sal not in (800, 1500,2000); --(可以對in指定的條件進行取反)
22、select ename from emp where ename like '%ALL%'; --(模糊查詢)
23、select ename from emp where ename like '_A%'; --(取第二個字母是A的所有字段)
24、select ename from emp where ename like '%/%%'; --(用轉義字符/查詢字段中本身就帶%字段的)
25、select ename from emp where ename like '%$%%' escape '$'; --(用轉義字符/查詢字段中本身就帶%字段的)
26、select * from dept order by deptno desc; (使用order by desc字段 對數據進行降序排列 默認為升序asc);
27、select * from dept where deptno <>10 order by deptno asc; --(我們可以將過濾以後的數據再進行排序)
28、select ename, sal, deptno from emp order by deptno asc, ename desc; --(按照多個字段排序 首先按照deptno升序排列,當detpno相同時,內部再按照ename的降序排列)
29、select lower(ename) from emp; --(函數lower() 將ename搜索出來後全部轉化為小寫);
30、select ename from emp where lower(ename) like '_a%'; --(首先將所搜索字段轉化為小寫,然後判斷第二個字母是不是a)
31、select substr(ename, 2, 3) from emp; --(使用函數substr() 將搜素出來的ename字段從第二個字母開始截,一共截3個字符)
32、select chr(65) from dual; --(函數chr() 將數字轉化為AscII中相對應的字符)
33、select ascii('A') from dual; --(函數ascii()與32中的chr()函數是相反的 將相應的字符轉化為相應的Ascii編碼) )
34、select round(23.232) from dual; --(函數round() 進行四捨五入操作)
35、select round(23.232, 2) from dual; --(四捨五入後保留的小數位數 0 個位 -1 十位)
36、select to_char(sal, '$99,999.9999')from emp; --(加$符號加入千位分隔符,保留四位小數,沒有的補零)
37、select to_char(sal, 'L99,999.9999')from emp; --(L 將貨幣轉化為本地幣種此處將顯示¥人民幣)
38、select to_char(sal, 'L00,000.0000')from emp; --(補零位數不一樣,可到數據庫執行查看)
39、select to_char(hiredate, 'yyyy-MM-DD HH:MI:SS') from emp; --(改變日期默認的顯示格式)
40、select to_char(sysdate, 'yyyy-MM-DD HH:MI:SS') from dual; --(用12小時制顯示當前的系統時間)
41、select to_char(sysdate, 'yyyy-MM-DD HH24:MI:SS') from dual; --(用24小時制顯示當前的系統時間)
42、select ename, hiredate from emp where hiredate > to_date('1981-2-20 12:24:45','YYYY-MM-DD HH24:MI:SS'); --(函數to-date 查詢公司在所給時間以後入職的人員)
43、select sal from emp where sal > to_number('$1,250.00', '$9,999.99'); --(函數to_number()求出這種薪水裏帶有特殊符號的)
44、select ename, sal*12 + nvl(comm,0) from emp; --(函數nvl() 求出員工的"年薪 + 提成(或獎金)問題")
45、select max(sal) from emp; -- (函數max() 求出emp表中sal字段的最大值)
46、select min(sal) from emp; -- (函數max() 求出emp表中sal字段的最小值)
47、select avg(sal) from emp; --(avg()求平均薪水);
48、select to_char(avg(sal), '999999.99') from emp; --(將求出來的平均薪水只保留2位小數)
49、select round(avg(sal), 2) from emp; --(將平均薪水四捨五入到小數點後2位)
50、select sum(sal) from emp; --(求出每個月要支付的總薪水)
------------------------/組函數(共5個):將多個條件組合到一起最後只產生一個數據------min() max() avg() sum() count()----------------------------/
51、select count(*) from emp; --求出表中一共有多少條記錄
52、select count(*) from emp where deptno=10; --再要求一共有多少條記錄的時候,還可以在後面跟上限定條件
53、select count(distinct deptno) from emp; --統計部門編號前提是去掉重複的值
------------------------聚組函數group by() --------------------------------------
54、select deptno, avg(sal) from emp group by deptno; --按照deptno分組,查看每個部門的平均工資
55、select max(sal) from emp group by deptno, job; --分組的時候,還可以按照多個字段進行分組,兩個字段不相同的為一組
56、select ename from emp where sal = (select max(sal) from emp); --求出
57、select deptno, max(sal) from emp group by deptno; --搜素這個部門中薪水最高的的值
--------------------------------------------------having函數對於group by函數的過濾 不能用where--------------------------------------
58、select deptno, avg(sal) from emp group by deptno having avg(sal) >2000; (order by )--求出每個部門的平均值,並且要 > 2000
59、select avg(sal) from emp where sal >1200 group by deptno having avg(sal) >1500 order by avg(sal) desc;--求出sal>1200的平均值按照deptno分組,平均值要>1500最後按照sal的倒序排列
60、select ename,sal from emp where sal > (select avg(sal) from emp); --求那些人的薪水是在平均薪水之上的。
61、select ename, sal from emp join (select max(sal) max_sal ,deptno from emp group by deptno) t on ( = _sal and no=no); --查詢每個部門中工資最高的那個人
------------------------------/等值連接--------------------------------------
62、select e, e from emp e1, emp e2 where = o; --自連接,把一張表當成兩張表來用
63、select ename, dname from emp, dept; --92年語法 兩張表的連接 笛卡爾積。
64、select ename, dname from emp cross join dept; --99年語法 兩張表的連接用cross join
65、select ename, dname from emp, dept where no = no; -- 92年語法 表連接 + 條件連接
66、select ename, dname from emp join dept on(no = no); -- 新語法
67、select ename,dname from emp join dept using(deptno); --與66題的寫法是一樣的,但是不推薦使用using : 假設條件太多
--------------------------------------/非等值連接------------------------------------------/
68、select ename,grade from emp e join salgrade s on( between l and l); --兩張表的連接 此種寫法比用where更清晰
69、select ename, dname, grade from emp e
join dept d on(no = no)
join salgrade s on ( between l and l)
where ename not like '_A%'; --三張表的連接
70、select e, e from emp e1 join emp e2 on( = o); --自連接第二種寫法,同62
71、select e, e from emp e1 left join emp e2 on( = o); --左外連接 把左邊沒有滿足條件的數據也取出來
72、select ename, dname from emp e right join dept d on(no = no); --右外連接
73、select deptno, avg_sal, grade from (select deptno, avg(sal) avg_sal from emp group by deptno) t join salgrade s on (_sal between l and l);--求每個部門平均薪水的等級
74、select ename from emp where empno in (select mgr from emp); -- 在表中搜索那些人是經理
75、select sal from emp where sal not in(select distinct from emp e1 join emp e2 on( < )); -- 面試題 不用組函數max()求薪水的最大值
76、select deptno, max_sal from
(select avg(sal) max_sal,deptno from emp group by deptno)
where max_sal =
(select max(max_sal) from
(select avg(sal) max_sal,deptno from emp group by deptno)
);--求平均薪水最高的部門名稱和編號。
77、select no, grade, avg_sal from
(select deptno, grade, avg_sal from
(select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on(_sal between l and l)
) t1
join dept on (no = no)
where e =
(
select min(grade) from
(select deptno, grade, avg_sal from
(select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on(_sal between l and l)
)
)--求平均薪水等級最低的部門的名稱 哈哈 確實比較麻煩
78、create view v$_dept_avg_sal_info as
select deptno, grade, avg_sal from
(select deptno, avg(sal) avg_sal from emp group by deptno) t
join salgrade s on(_sal between l and l);
--視圖的創建,一般以v$開頭,但不是固定的
79、select no, grade, avg_sal from v$_dept_avg_sal_info t1
join dept on (no = no)
where e =
(
select min(grade) from
v$_dept_avg_sal_info t1
)
)--求平均薪水等級最低的部門的名稱 用視圖,能簡單一些,相當於Java中方法的封裝
80、---創建視圖出現權限不足時候的解決辦法:
conn sys/admin as sysdba;
--顯示:連接成功 Connected
grant create table, create view to scott;
-- 顯示: 授權成功 Grant succeeded
81、-------求比普通員工最高薪水還要高的經理人的名稱 -------
select ename, sal from emp where empno in
(select distinct mgr from emp where mgr is not null)
and sal >
(
select max(sal) from emp where empno not in
(select distinct mgr from emp where mgr is not null)
)
82、---面試題:比較效率
select * from emp where deptno = 10 and ename like '%A%';--好,將過濾力度大的放在前面
select * from emp where ename like '%A%' and deptno = 10;
83、-----表的備份
create table dept2 as select * from dept;
84、-----插入數據
insert into dept2 values(50,'game','beijing');
----只對某個字段插入數據
insert into dept2(deptno,dname) values(60,'game2');
85、-----將一個表中的數據完全插入另一個表中(表結構必須一樣)
insert into dept2 select * from dept;
86、-----求前五名員工的編號和名稱(使用虛字段rownum 只能使用 < 或 = 要使用 > 必須使用子查詢)
select empno,ename from emp where rownum <= 5;
86、----求10名僱員以後的僱員名稱--------
select ename from (select rownum r,ename from emp) where r > 10;
87、----求薪水最高的前5個人的薪水和名字---------
select ename, sal from (select ename, sal from emp order by sal desc) where rownum <=5;
88、----求按薪水倒序排列後的第6名到第10名的員工的名字和薪水--------
select ename, sal from
(select ename, sal, rownum r from
(select ename, sal from emp order by sal desc)
)
where r>=6 and r<=10
89、----------------創建新用户---------------
1、backup scott--備份
exp--導出
2、create user
create user guohailong identified(認證) by guohailong default tablespace users quota(配額) 10M on users
grant create session(給它登錄到服務器的權限),create table, create view to guohailong
3、import data
imp
90、-----------事務回退語句--------
rollback;
91、-----------事務確認語句--------
commit;--此時再執行rollback無效
92、--當正常斷開連接的時候例如exit,事務自動提交。 當非正常斷開連接,例如直接關閉dos窗口或關機,事務自動提交
93、/*有3個表S,C,SC
S(SNO,SNAME)代表(學號,姓名)
C(CNO,CNAME,CTEACHER)代表(課號,課名,教師)
SC(SNO,CNO,SCGRADE)代表(學號,課號成績)
問題:
1,找出沒選過“黎明”老師的所有學生姓名。
2,列出2門以上(含2門)不及格學生姓名及平均成績。
3,即學過1號課程有學過2號課所有學生的姓名。
*/答案:
1、
select sname from s join sc on( = ) join c on ( = ) where cteacher <> '黎明';
2、
select sname where sno in (select sno from sc where scgrade < 60 group by sno having count(*) >=2);
3、
select sname from s where sno in (select sno, from sc where cno=1 and cno in
(select distinct sno from sc where cno = 2);
)
94、--------------創建表--------------
create table stu
(
id number(6),
name varchar2(20) constraint stu_name_mm not null,
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4),
email varchar2(50) unique
);
95、--------------給name字段加入 非空 約束,並給約束一個名字,若不取,系統默認取一個-------------
create table stu
(
id number(6),
name varchar2(20) constraint stu_name_mm not null,
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4),
email varchar2(50)
);
96、--------------給nameemail字段加入 唯一 約束 兩個 null值 不為重複-------------
create table stu
(
id number(6),
name varchar2(20) constraint stu_name_mm not null,
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4),
email varchar2(50) unique
);
97、--------------兩個字段的組合不能重複 約束:表級約束-------------
create table stu
(
id number(6),
name varchar2(20) constraint stu_name_mm not null,
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4),
email varchar2(50),
constraint stu_name_email_uni unique(email, name)
);
98、--------------主鍵約束-------------
create table stu
(
id number(6),
name varchar2(20) constraint stu_name_mm not null,
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4),
email varchar2(50),
constraint stu_id_pk primary key (id),
constraint stu_name_email_uni unique(email, name)
);
99、--------------外鍵約束 被參考字段必須是主鍵 -------------
create table stu
(
id number(6),
name varchar2(20) constraint stu_name_mm not null,
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4) references class(id),
email varchar2(50),
constraint stu_class_fk foreign key (class) references class(id),
constraint stu_id_pk primary key (id),
constraint stu_name_email_uni unique(email, name)
);
create table class
(
id number(4) primary key,
name varchar2(20) not null
);
100、---------------修改表結構,添加字段------------------
alter table stu add(addr varchar2(29));
101、---------------刪除字段--------------------------
alter table stu drop (addr);
102、---------------修改表字段的長度------------------
alter table stu modify (addr varchar2(50));--更改後的長度必須要能容納原先的數據
103、----------------刪除約束條件----------------
alter table stu drop constraint 約束名
104、-----------修改表結構添加約束條件---------------
alter table stu add constraint stu_class_fk foreign key (class) references class (id);
105、---------------數據字典表----------------
desc dictionary;
--數據字典表共有兩個字段 table_name comments
--table_name主要存放數據字典表的名字
--comments主要是對這張數據字典表的描述
105、---------------查看當前用户下面所有的表、視圖、約束-----數據字典表user_tables---
select table_name from user_tables;
select view_name from user_views;
select constraint_name from user-constraints;
106、-------------索引------------------
create index idx_stu_email on stu (email);-- 在stu這張表的email字段上建立一個索引:idx_stu_email
107、---------- 刪除索引 ------------------
drop index index_stu_email;
108、---------查看所有的索引----------------
select index_name from user_indexes;
109、---------創建視圖-------------------
create view v$stu as selesct id,name,age from stu;
視圖的作用: 簡化查詢 保護我們的一些私有數據,通過視圖也可以用來更新數據,但是我們一般不這麼用 缺點:要對視圖進行維護
110、-----------創建序列------------
create sequence seq;--創建序列
select val from dual;-- 查看seq序列的下一個值
drop sequence seq;--刪除序列
111、------------數據庫的三範式--------------
(1)、要有主鍵,列不可分
(2)、不能存在部分依賴:當有多個字段聯合起來作為主鍵的時候,不是主鍵的字段不能部分依賴於主鍵中的某個字段
(3)、不能存在傳遞依賴
==============================================PL/SQL==========================
112、-------------------在客户端輸出helloworld-------------------------------
set serveroutput on;--默認是off,設成on是讓Oracle可以在客户端輸出數據
113、begin
dbms__line('helloworld');
end;
/
114、----------------pl/sql變量的賦值與輸出----
declare
v_name varchar2(20);--聲明變量v_name變量的聲明以v_開頭
begin
v_name := 'myname';
dbms__line(v_name);
end;
/
115、-----------pl/sql對於異常的處理(除數為0)-------------
declare
v_num number := 0;
begin
v_num := 2/v_num;
dbms__line(v_num);
exception
when others then
dbms__line('error');
end;
/
116、----------變量的聲明----------
binary_integer:整數,主要用來計數而不是用來表示字段類型 比number效率高
number:數字類型
char:定長字符串
varchar2:變長字符串
date:日期
long:字符串,最長2GB
boolean:布爾類型,可以取值true,false,null--最好給一初值
117、----------變量的聲明,使用 '%type'屬性
declare
v_empno number(4);
v_empno2 o%type;
v_empno3 v_empno2%type;
begin
dbms__line('Test');
end;
/
--使用%type屬性,可以使變量的聲明根據表字段的類型自動變換,省去了維護的麻煩,而且%type屬性,可以用於變量身上
118、---------------Table變量類型(table表示的是一個數組)-------------------
declare
type type_table_emp_empno is table of o%type index by binary_integer;
v_empnos type_table type_table_empno;
begin
v_empnos(0) := 7345;
v_empnos(-1) :=9999;
dbms__line(v_empnos(-1));
end;
119、-----------------Record變量類型
declare
type type_record_dept is record
(
deptno no%type,
dname e%type,
loc %type
);
begin
v_no:=50;
v_e:='aaaa';
v_:='bj';
dbms__line(v no || ' ' || v e);
end;
120、-----------使用 %rowtype聲明record變量
declare
v_temp dept%rowtype;
begin
v_no:=50;
v_e:='aaaa';
v_:='bj';
dbms__line(v no || '' || v e)
end;
121、--------------sql%count 統計上一條sql語句更新的記錄條數
122、--------------sql語句的運用
declare
v_ename e%type;
v_sal %type;
begin
select ename,sal into v_ename,v_sal from emp where empno = 7369;
dbms__line(v_ename || '' || v_sal);
end;
123、 -------- pl/sql語句的應用
declare
v_emp emp%rowtype;
begin
select * into v_emp from emp where empno=7369;
dbms_output_line(v_e);
end;
124、-------------pl/sql語句的應用
declare
v_deptno no%type := 50;
v_dname e%type :='aaa';
v_loc %type := 'bj';
begin
insert into dept2 values(v_deptno,v_dname,v_loc);
commit;
end;
125、-----------------ddl語言,數據定義語言
begin
execute immediate 'create table T (nnn varchar(30) default ''a'')';
end;
126、------------------if else的運用
declare
v_sal %type;
begin
select sal into v_sal from emp where empno = 7369;
if(v_sal < 2000) then
dbms__line('low');
elsif(v_sal > 2000) then
dbms__line('middle');
else
dbms__line('height');
end if;
end;
127、-------------------循環 =====do while
declare
i binary_integer := 1;
begin
loop
dbms__line(i);
i := i + 1;
exit when (i>=11);
end loop;
end;
128、---------------------while
declare
j binary_integer := 1;
begin
while j < 11 loop
dbms__line(j);
j:=j+1;
end loop;
end;
129、---------------------for
begin
for k in 1..10 loop
dbms__line(k);
end loop;
for k in reverse 1..10 loop
dbms__line(k);
end loop;
end;
130、-----------------------異常(1)
declare
v_temp number(4);
begin
select empno into v_temp from emp where empno = 10;
exception
when too_many_rows then
dbms__line('太多記錄了');
when others then
dbms__line('error');
end;
131、-----------------------異常(2)
declare
v_temp number(4);
begin
select empno into v_temp from emp where empno = 2222;
exception
when no_data_found then
dbms__line('太多記錄了');
end;
132、----------------------創建序列
create sequence seq_errorlog_id start with 1 increment by 1;
133、-----------------------錯誤處理(用表記錄:將系統日誌存到數據庫便於以後查看)
-- 創建日誌表:
create table errorlog
(
id number primary key,
errcode number,
errmsg varchar2(1024),
errdate date
);
declare
v_deptno no%type := 10;
v_errcode number;
v_errmsg varchar2(1024);
begin
delete from dept where deptno = v_deptno;
commit;
exception
when others then
rollback;
v_errcode := SQLCODE;
v_errmsg := SQLERRM;
insert into errorlog values (seq_errorlog_val, v_errcode,v_errmsg, sysdate);
commit;
end;
133---------------------PL/SQL中的重點cursor(遊標)和指針的概念差不多
declare
cursor c is
select * from emp; --此處的語句不會立刻執行,而是當下面的open c的時候,才會真正執行
v_emp c%rowtype;
begin
open c;
fetch c into v_emp;
dbms__line(v_e); --這樣會只輸出一條數據 134將使用循環的方法輸出每一條記錄
close c;
end;
134----------------------使用do while 循環遍歷遊標中的每一個數據
declare
cursor c is
select * from emp;
v_emp c%rowtype;
begin
open c;
loop
fetch c into v_emp;
(1) exit when (c%notfound); --notfound是oracle中的關鍵字,作用是判斷是否還有下一條數據
(2) dbms__line(v_e); --(1)(2)的順序不能顛倒,最後一條數據,不會出錯,會把最後一條數據,再次的打印一遍
end loop;
close c;
end;
135------------------------while循環,遍歷遊標
declare
cursor c is
select * from emp;
v_emp emp%rowtype;
begin
open c;
fetch c into v_emp;
while(c%found) loop
dbms__line(v_e);
fetch c into v_emp;
end loop;
close c;
end;
136--------------------------for 循環,遍歷遊標
declare
cursor c is
select * from emp;
begin
for v_emp in c loop
dbms__line(v_e);
end loop;
end;
137---------------------------帶參數的遊標
declare
cursor c(v_deptno no%type, v_job %type)
is
select ename, sal from emp where deptno=v_deptno and job=v_job;
--v_temp c%rowtype;此處不用聲明變量類型
begin
for v_temp in c(30, 'click') loop
dbms__line(v_e);
end loop;
end;
138-----------------------------可更新的遊標
declare
cursor c --有點小錯誤
is
select * from emp2 for update;
-v_temp c%rowtype;
begin
for v_temp in c loop
if(v_ < 2000) then
update emp2 set sal = sal * 2 where current of c;
else if (v_ =5000) then
delete from emp2 where current of c;
end if;
end loop;
commit;
end;
139-----------------------------------procedure存儲過程(帶有名字的程序塊)
create or replace procedure p
is--這兩句除了替代declare,下面的語句全部都一樣
cursor c is
select * from emp2 for update;
begin
for v_emp in c loop
if(v_no = 10) then
update emp2 set sal = sal +10 where current of c;
else if(v_no =20) then
update emp2 set sal = sal + 20 where current of c;
else
update emp2 set sal = sal + 50 where current of c;
end if;
end loop;
commit;
end;
--執行存儲過程的兩種方法:
(1)exec p;(p是存儲過程的名稱)
(2)
begin
p;
end;
/
140-------------------------------帶參數的存儲過程
create or replace procedure p
(v_a in number, v_b number, v_ret out number, v_temp in out number)
is
begin
if(v_a > v_b) then
v_ret := v_a;
else
v_ret := v_b;
end if;
v_temp := v_temp + 1;
end;
141----------------------調用140
declare
v_a number := 3;
v_b number := 4;
v_ret number;
v_temp number := 5;
begin
p(v_a, v_b, v_ret, v_temp);
dbms__line(v_ret);
dbms__line(v_temp);
end;
142------------------刪除存儲過程
drop procedure p;
143------------------------創建函數計算個人所得税
create or replace function sal_tax
(v_sal number)
return number
is
begin
if(v_sal < 2000) then
return 0.10;
elsif(v_sal <2750) then
return 0.15;
else
return 0.20;
end if;
end;
----144-------------------------創建觸發器(trigger) 觸發器不能單獨的存在,必須依附在某一張表上
--創建觸發器的依附表
create table emp2_log
(
ename varchar2(30) ,
eaction varchar2(20),
etime date
);
create or replace trigger trig
after insert or delete or update on emp2 ---for each row 加上此句,每更新一行,觸發一次,不加入則值觸發一次
begin
if inserting then
insert into emp2_log values(USER, 'insert', sysdate);
elsif updating then
insert into emp2_log values(USER, 'update', sysdate);
elsif deleting then
insert into emp2_log values(USER, 'delete', sysdate);
end if;
end;
145-------------------------------通過觸發器更新數據
create or replace trigger trig
after update on dept
for each row
begin
update emp set deptno =:no where deptno =: no;
end;
------只編譯不顯示的解決辦法 set serveroutput on;
145-------------------------------通過創建存儲過程完成遞歸
create or replace procedure p(v_pid %type,v_level binary_integer) is
cursor c is select * from article where pid = v_pid;
v_preStr varchar2(1024) := '';
begin
for i in 0..v_leave loop
v_preStr := v_preStr || '****';
end loop;
for v_article in c loop
dbms__line(v_);
if(v_af = 0) then
p(v_);
end if;
end loop;
end;
146-------------------------------查看當前用户下有哪些表---
--首先,用這個用户登錄然後使用語句:
select * from tab;
147-----------------------------用Oracle進行分頁!--------------
--因為Oracle中的隱含字段rownum不支持'>'所以:
select * from (
select rownum rn, t.* from (
select * from t_user where user_id <> 'root'
) t where rownum <6
) where rn >3
148------------------------Oracle下面的清屏命令----------------
clear screen; 或者 cle scr;
149-----------將創建好的guohailong的這個用户的密碼改為abc--------------
alter user guohailong identified by abc
--當密碼使用的是數字的時候可能會不行
--使用在10 Oracle以上的正則表達式在dual表查詢
with test1 as(
select 'ao' name from dual union all
select 'yang' from dual union all
select 'feng' from dual )
select distinct regexp_replace(name,'[0-9]','') from test1
------------------------------------------
with tab as (
select 'hong' name from dual union all
select 'qi' name from dual union all
select 'gong' name from dual)
select translate(name,'