锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
create table article
(
id number primary key,
count varchar2(4000),
pid number,
isleaf number(1), --0 浠h〃闈炲彾瀛愯妭鐐癸紝1浠h〃鍙跺瓙鑺傜偣
alevel number(2)
);
insert into article values(1,'铓傝殎澶ф垬澶ц薄',0,0,0);
insert into article values(2,'澶ц薄琚墦瓚翠笅',1,0,1);
insert into article values(3,'铓傝殎涔熶笉濂借繃',2,1,2);
insert into article values(4,'鐬庤',2,0,2);
insert into article values(5,'娌℃湁鐬庤',4,1,3);
insert into article values(6,'鎬庝箞鍙兘',1,0,1);
insert into article values(7,'鎬庝箞娌℃湁鍙兘',6,1,2);
insert into article values(8,'鍙兘鎬ф槸寰堝ぇ鐨?,6,1,2);
insert into article values(9,'澶ц薄榪涘尰闄簡',2,0,2);
insert into article values(10,'鎶ゅ+鏄殏铓?,9,1,3);
commit;
铓傝殎澶ф垬澶ц薄
澶ц薄琚墦瓚翠笅浜?br />
铓傝殎涔熶笉濂借繃
鐬庤
娌℃湁鐬庤
澶ц薄榪涘尰闄簡
鎶ゅ+鏄殏铓?br />
鎬庝箞鍙兘
鎬庝箞娌℃湁鍙兘
鍙兘鎬ф槸寰堝ぇ鐨?br />
--鐢ㄥ瓨鍌ㄨ繃紼嬪睍鐜版爲鐘剁粨鏋勩?br />
create or replace procedure p(v_pid article.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_level loop
v_preStr := v_preStr || '****';
end loop;
for v_article in c loop
dbms_output.put_line(v_preStr ||v_article.cont);
if(v_article.isleaf=0) then
p(v_artile.id,v_levle +1);
end if;
end loop;
end;
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); --USER鍏抽敭瀛楋紝鐢ㄦ埛銆?br />
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;
update emp2 set sal = sal*2 where deptno = 30;
select * from emp2_log;
drop trigger trig;
--鐩存帴鎵ц鏃訛紝鍑虹幇榪濆弽瀹屾暣綰︽潫鏉′歡錛屽凡鎵懼埌瀛愯褰曘?br /> update dept set deptno = 99 where deptno = 10;
--浣跨敤涓嬮潰鐨勶紝鎶婂瓙琛ㄤ竴璧鋒洿鏂般?br />
create or replace trigger trig
after update on dept for each row
begin
update emp set deptno =:NEW.deptno where deptno =:OLD.deptno;
end;
update dept set deptno = 99 where deptno = 10;
select * from emp;
rollback;
鏁版嵁搴撳畾涔夌殑鍑芥暟money_to_chinese 錛屾妸鏁板瓧杞崲姝d腑鏂囪緭鍑恒?/span>
create or replace function money_to_chinese(money in VARCHAR2)
return varchar2 is
c_money VARCHAR2(12);
m_string VARCHAR2(60) := '鍒嗚鍦嗘嬀浣頒粺涓囨嬀浣頒粺浜?;
n_string VARCHAR2(40) := '澹硅窗鍙佽倖浼嶉檰鏌掓崒鐜?;
b_string VARCHAR2(80);
n CHAR;
len NUMBER(3);
i NUMBER(3);
tmp NUMBER(12);
is_zero BOOLEAN;
z_count NUMBER(3);
l_money NUMBER;
l_sign VARCHAR2(10);
BEGIN
l_money := abs(money);
IF money < 0 THEN
l_sign := '璐? ;
ELSE
l_sign := '';
END IF;
tmp := round(l_money, 2) * 100;
c_money := rtrim(ltrim(to_char(tmp, '999999999999')));
len := length(c_money);
is_zero := TRUE;
z_count := 0;
i := 0;
WHILE i < len LOOP
i := i + 1;
n := substr(c_money, i, 1);
IF n = '0' THEN
IF len - i = 6 OR len - i = 2 OR len = i THEN
IF is_zero THEN
b_string := substr(b_string, 1, length(b_string) - 1);
is_zero := FALSE;
END IF;
IF len - i = 6 THEN
b_string := b_string || '涓?;
END IF;
IF len - i = 2 THEN
b_string := b_string || '鍦?;
END IF;
IF len = i THEN
IF (len = 1) THEN
b_string := '闆跺渾鏁?;
ELSE
b_string := b_string || '鏁?;
END IF;
END IF;
z_count := 0;
ELSE
IF z_count = 0 THEN
b_string := b_string || '闆?;
is_zero := TRUE;
END IF;
z_count := z_count + 1;
END IF;
ELSE
b_string := b_string || substr(n_string, to_number(n), 1) ||
substr(m_string, len - i + 1, 1);
z_count := 0;
is_zero := FALSE;
END IF;
END LOOP;
b_string := l_sign || b_string ;
RETURN b_string;
exception
--寮傚父澶勭悊
WHEN OTHERS THEN
RETURN(SQLERRM);
END;
--鎵ц錛?br /> exec p;
begin
p;
end;
--甯﹀弬鏁扮殑瀛樺偍榪囩▼錛宨n浼犲叆鍙傛暟錛岄粯璁や負浼犲叆錛宱ut浼犲嚭銆?/span>
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;
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_output.put_line(v_ret);
dbms_output.put_line(v_temp);
end;
declare
cursor c is
select * from emp;
v_emp emp%rowtype;
begin
open c;
fetch c into v_emp;
while(c%found) loop
dbms_output.put_line(v_emp.ename);
fetch c into v_emp;
--fetch c into v_emp; 瀵艱嚧絎竴鏉℃病鏈夋墦鍗幫紝鏈鍚庝竴鏉℃墦鍗?閬嶃?br />
--dbms_output.put_line(v_emp.ename);
end loop;
close c;
end;
declare
cursor c is
select * from emp;
begin
for v_emp in c loop
dbms_output.put_line(v_emp.ename);
end loop;
end;
--甯﹀弬鏁扮殑娓告爣
declare
cursor c(v_deptno emp.deptno%type,v_job emp.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,'CLERK') loop --for鑷姩鎵撳紑娓告爣銆?br />
dbms_output.put_line(v_temp.ename);
end loop;
end;
--鍙洿鏂扮殑娓告爣
declare
cursor c
is
select * from emp2 for update;
--v_temp c%rowtype;
begin
for v_temp in c loop
if(v_temp.sal <2000) then
update emp2 set sal = sal*2 where current of c;
elsif(v_temp.sal = 5000) then
delete from emp2 where current of c;
end if;
end loop;
commit;
end;
set serveroutput on;
-- 綆鍗曠殑PL/SQL璇彞鍧?/span>
declare
v_name varchar2(20);
begin
v_name :='myname';
dbms_output.put_line(v_name);
end;
/
--璇彞鍧楃殑緇勬垚
declare
v_num number := 0 ;
begin
v_num := 2/v_num;
dbms_output.put_line(v_num);
exception
when others then
dbms_output.put_line('error');
end;
/
--鍙橀噺澹版槑鐨勮鍒?br />
1銆佸彉閲忓悕涓嶈兘澶熶嬌鐢ㄤ繚鐣欏瓧錛屽from銆乻elect絳?br />
2銆佺涓涓瓧絎﹀繀欏繪槸瀛楁瘝
3銆佸彉閲忓悕鏈澶氬寘鍚?0涓瓧絎?br />
4銆佷笉瑕佷笌鏁版嵁搴撶殑琛ㄦ垨鑰呭垪鍚屽悕
5銆佹瘡涓琛屽彧鑳藉0鏄庝竴涓彉閲?/span>
--甯哥敤鍙橀噺綾誨瀷
1銆乥inary_integer錛氭暣鏁幫紝涓昏鐢ㄦ潵璁℃暟鑰屼笉鏄敤鏉ヨ〃紺哄瓧孌電被鍨?br />
2銆乶umber錛氭暟瀛楃被鍨?br />
3銆乧har錛氬畾闀垮瓧絎︿覆
4銆乿archar2錛氬彉闀垮瓧絎︿覆
5銆乨ate錛氭棩鏈?br />
6銆乴ong錛氶暱瀛楃涓詫紝鏈闀?GB
7銆乥oolean錛氬竷灝旂被鍨嬶紝鍙互鍙栧紅rue銆乫alse鍜宯ull鍊?/span>
--鍙橀噺澹版槑
declare
v_temp number(1);
v_count binary_integer :=0;
v_sal number(7,2):= 4000.00;
v_date date:= sysdate;
v_pi constant number(3,2) := 3.14; --constant鐩稿綋java鐨刦inal甯擱噺
v_valid boolean := false;
v_name varchar2(20) not null :='MyName';
begin
dbms_output.put_line('v_temp value:'|| v_temp);
end;
--鍙橀噺澹版槑錛屼嬌鐢?type灞炴?br />
declare
v_empno number(4);
v_empno2 emp.empno%type;
v_empno3 v_empno2%type;
begin
dbms_output.put_line('Test');
end;
--綆鍗曞彉閲忚祴鍊?br />
declare
v_name varchar2(20);
v_sal number(7,2);
v_sal2 number(7,2);
v_valid boolean :=false;
v_date date;
begin
va_name :='MyName';
v_sal :=23.77;
v_sal2 :=23.77;
v_valid:=(v_sal = v_sal2);
v_date:=to_date('1999-08-12 12:23:38','YYYY-MM-DD HH24:MI:SS');
end;
--Table鍙橀噺綾誨瀷錛屽畾涔変竴縐嶆柊鐨勭被鍨嬶紝鏄暟緇勩?/span>
declare
type type_table_emp_empno is table of emp.empno%type index by binary_integer;
v_empno type_table_emp_empno;
begin
v_empnos(0) := 7369;
v_empnos(2) := 7839;
v_empnos(-1) := 9999;
dbms_output.put_line(v_empnos(-1));
end;
--Record鍙橀噺綾誨瀷,綾諱技java鐨勭被鐨勬蹇點?/span>
declare
type type_record_dept is record
(
deptno dept.deptno%type,
dname dept.dname%type,
loc dept.loc%type
);
v_tmp type_record_dept;
begin
v_tmp.deptno := 50;
v_tmp.dname := 'aaaa';
v_tmp.loc := 'bj';
dbms_output.put_line(v_temp.deptno||''||v_temp.dname);
end;
--浣跨敤%rowtype澹版槑Record鍙橀噺
declare
v_temp dept%rowtype;
begin
v_tmp.deptno := 50;
v_tmp.dname := 'aaaa';
v_tmp.loc := 'bj';
dbms_output.put_line(v_temp.deptno||''||v_temp.dname);
end;
--SQL璇彞鐨勮繍鐢紝榪斿洖鏁版嵁鏈変笖鍙湁涓鏉¤褰曘?br />
declare
v_ename emp.ename%type;
v_sal emp.sal%type;
begin
select ename,sal into v_ename,v_sal from emp where empno = 7369;
dbms_output.put_line(v_ename||''||v_sal);
end;
declare
v_emp emp%rowtype;
begin
select * into v_emp from emp where empno = 7369;
dbms_output.put_line(v_emp.ename);
end;
declare
v_deptno dept.deptno%type := 50;
v_dname dept.dname%type := 'aaaa';
v_loc dept.loc%type := 'bj';
begin
insert into dept2 values (v_deptno,v_dname,v_loc);
commit;
end;
declare
v_deptno emp2.deptno%type := 10;
v_count number ;
begin
--update emp2 set sal = sal/2 where deptno = v_deptno;
--select deptno into v_deptno from emp2 where empno = 7369;
select count(*) into v_count from emp2;
dbms_output.put_line(sql%rowcount||'鏉¤褰曡褰卞搷');
commit;
end;
DDL璇彞錛?br />
begin
execute immediate 'create table T(nnn varchar2(20) default ''aaa'')';
end;
--if璇彞錛氬彇鍑?369鐨勮柂姘達紝濡傛灉<1200錛屽垯杈撳嚭'low'錛屽鏋?lt;2000鍒欒緭鍑?middle'錛屽惁鍒?high'
declare
v_sal emp.sal%type;
begin
select sal into v_sal from emp where empno = 7369;
if(v_sal < 1200) then
dbms_output.put_line('low');
elsif(v_sal < 2000) then
dbms_output.put_line('middle');
else
dbms_output.put_line('high');
end if;
end;
--寰幆
declare
i binary_integer := 1;
begin
loop
dbms_output.put_line(i);
i := i+ 1;
exit when (i >= 11);
end loop;
end;
declare
j binary_integer := 1;
begin
while j< 11 loop
dbms_output.put_line(j);
j := j+ 1;
end loop;
end;
begin
for k in 1..10 loop
dbms_output.put_line(k);
end loop;
for k in reverse 1..10 loop
dbms_output.put_line(k);
end loop;
end;
--閿欒澶勭悊
declare
v_temp number(4);
begin
select empno into v_temp from emp where deptno = 10;
exception
when too_many_rows then
dbms_output.put_line('澶璁板綍浜?);
when others then
dbms_output.put_line('error');
end;
declare
v_temp number(4);
begin
select empno into v_temp from emp where empno = 2222;
exception
when no_data_found then
dbms_output.put_line('娌℃暟鎹?);
end;
create table errorlog
(
id number primary key,
errcode number,
errmsg varchar2(1024),
errdate date
);
create sequence seq_errorlog_id start with 1 increment by 1;
declare
v_deptno dept.deptno%type := 10;
v_errmsg varchar2(1024);
begin
delete from dept where deptno = v_deptno;
commit;
exception
when others then
rollback;
v_errcode := SQLCODE; --鍏抽敭瀛楋紝浠h〃鍑洪敊鐨勪唬鐮併?br />
v_errmsg := SQLERRM;
insert into errorlog values (seq_errorlog_id.nextval,v_errcode,v_errmsg,sysdate);
commit;
end;
絎竴鑼冨紡錛?NF錛夛細鏃犻噸澶嶇殑鍒椼?/span>
鎵璋撶涓鑼冨紡錛?NF錛夋槸鎸囨暟鎹簱琛ㄧ殑姣忎竴鍒楅兘鏄笉鍙垎鍓茬殑鍩烘湰鏁版嵁欏癸紝鍚屼竴鍒椾腑涓嶈兘鏈夊涓?/span>鍊鹼紝鍗沖疄浣撲腑鐨勬煇涓睘鎬т笉鑳芥湁澶氫釜鍊兼垨鑰呬笉鑳芥湁閲嶅鐨勫睘鎬с傚鏋滃嚭鐜伴噸澶嶇殑灞炴э紝灝卞彲鑳介渶瑕佸畾涔変竴涓柊鐨勫疄浣擄紝鏂扮殑瀹炰綋鐢遍噸澶嶇殑灞炴ф瀯鎴愶紝鏂板疄浣撲笌鍘熷疄浣撲箣闂翠負涓瀵瑰鍏崇郴銆傚湪絎竴鑼冨紡錛?NF錛変腑琛ㄧ殑姣忎竴琛屽彧鍖呭惈涓涓疄渚嬬殑淇℃伅銆傜畝鑰岃█涔嬶紝絎竴鑼冨紡灝辨槸鏃犻噸澶嶇殑鍒椼?br />
鏁版嵁搴撹〃涓殑瀛楁閮芥槸鍗曚竴灞炴х殑錛屼笉鍙啀鍒嗐傝繖涓崟涓灞炴х敱鍩烘湰綾誨瀷鏋勬垚錛屽寘鎷暣鍨嬨佸疄鏁般佸瓧絎﹀瀷銆侀昏緫鍨嬨佹棩鏈熷瀷絳夈?/span>
璇存槑錛氬湪浠諱綍涓涓叧緋繪暟鎹簱涓紝絎竴鑼冨紡錛?NF錛夋槸瀵瑰叧緋繪ā寮忕殑鍩烘湰瑕佹眰錛屼笉婊¤凍絎竴鑼冨紡錛?NF錛夌殑鏁版嵁搴撳氨涓嶆槸鍏崇郴鏁版嵁搴撱?
絎簩鑼冨紡錛?NF錛夛細灞炴у畬鍏ㄤ緷璧栦簬涓婚敭[娑堥櫎閮ㄥ垎瀛愬嚱鏁頒緷璧朷銆?br />
絎簩鑼冨紡錛?NF錛夋槸鍦ㄧ涓鑼冨紡錛?NF錛夌殑鍩虹涓婂緩绔嬭搗鏉ョ殑錛屽嵆婊¤凍絎簩鑼冨紡錛?NF錛夊繀欏誨厛婊?/span>瓚崇涓鑼冨紡錛?NF錛夈傜浜岃寖寮忥紙2NF錛夎姹傛暟鎹簱琛ㄤ腑鐨勬瘡涓疄渚嬫垨琛屽繀欏誨彲浠ヨ鎯熶竴鍦板尯鍒嗐備負瀹?/span>鐜板尯鍒嗛氬父闇瑕佷負琛ㄥ姞涓婁竴涓垪錛屼互瀛樺偍鍚勪釜瀹炰緥鐨勬儫涓鏍囪瘑銆備緥濡傚憳宸ヤ俊鎭〃涓姞涓婁簡鍛樺伐緙栧彿錛坋mp_id錛夊垪錛屽洜涓烘瘡涓憳宸ョ殑鍛樺伐緙栧彿鏄儫涓鐨勶紝鍥犳姣忎釜鍛樺伐鍙互琚儫涓鍖哄垎銆傝繖涓儫涓灞炴у垪琚О涓轟富鍏抽敭瀛楁垨涓婚敭銆佷富鐮併?
絎簩鑼冨紡錛?NF錛夎姹傚疄浣撶殑灞炴у畬鍏ㄤ緷璧栦簬涓誨叧閿瓧銆傛墍璋撳畬鍏ㄤ緷璧栨槸鎸囦笉鑳藉瓨鍦ㄤ粎渚濊禆涓?/span>鍏抽敭瀛椾竴閮ㄥ垎鐨勫睘鎬э紝濡傛灉瀛樺湪錛岄偅涔堣繖涓睘鎬у拰涓誨叧閿瓧鐨勮繖涓閮ㄥ垎搴旇鍒嗙鍑烘潵褰㈡垚涓涓柊鐨勫疄浣擄紝鏂板疄浣撲笌鍘熷疄浣撲箣闂存槸涓瀵瑰鐨勫叧緋匯備負瀹炵幇鍖哄垎閫氬父闇瑕佷負琛ㄥ姞涓婁竴涓垪錛屼互瀛樺偍鍚勪釜瀹炰緥鐨?/span>鎯熶竴鏍囪瘑銆傜畝鑰岃█涔嬶紝絎簩鑼冨紡灝辨槸灞炴у畬鍏ㄤ緷璧栦簬涓婚敭銆?
絎笁鑼冨紡錛?NF錛夛細灞炴т笉渚濊禆浜庡叾瀹冮潪涓誨睘鎬娑堥櫎浼犻掍緷璧朷銆?/span>
婊¤凍絎笁鑼冨紡錛?NF錛夊繀欏誨厛婊¤凍絎簩鑼冨紡錛?NF錛夈傜畝鑰岃█涔嬶紝絎笁鑼冨紡錛?NF錛夎姹備竴涓暟鎹簱琛ㄤ腑涓嶅寘鍚凡鍦ㄥ叾瀹冭〃涓凡鍖呭惈鐨勯潪涓誨叧閿瓧淇℃伅銆備緥濡傦紝瀛樺湪涓涓儴闂ㄤ俊鎭〃錛屽叾涓瘡涓?/span>閮ㄩ棬鏈夐儴闂ㄧ紪鍙鳳紙dept_id錛夈侀儴闂ㄥ悕縐般侀儴闂ㄧ畝浠嬬瓑淇℃伅銆傞偅涔堝湪鐨勫憳宸ヤ俊鎭〃涓垪鍑洪儴闂ㄧ紪鍙峰悗灝?/span>涓嶈兘鍐嶅皢閮ㄩ棬鍚嶇О銆侀儴闂ㄧ畝浠嬬瓑涓庨儴闂ㄦ湁鍏崇殑淇℃伅鍐嶅姞鍏ュ憳宸ヤ俊鎭〃涓傚鏋滀笉瀛樺湪閮ㄩ棬淇℃伅琛紝鍒?/span>鏍規嵁絎笁鑼冨紡錛?NF錛変篃搴旇鏋勫緩瀹冿紝鍚﹀垯灝變細鏈夊ぇ閲忕殑鏁版嵁鍐椾綑銆傜畝鑰岃█涔嬶紝絎笁鑼冨紡灝辨槸灞炴т笉渚?/span>璧栦簬鍏跺畠闈炰富灞炴с?br />
鎵璋撲紶閫掑嚱鏁頒緷璧栵紝鎸囩殑鏄鏋滃瓨鍦?A → B → C"鐨勫喅瀹氬叧緋伙紝鍒機浼犻掑嚱鏁頒緷璧栦簬A銆?/span>
create table article
(
id number,
title varchar2(1024),
cont long
);
insert into article values(seq.nextval,'a','b');
select * from user_sequences; --鏌ヨ搴忓垪
create sequence seq; --鍒涘緩搴忓垪seq瀵硅薄
select seq.nextval from dual;
drop sequence seq;
瑙嗗浘鐨勪紭鐐癸細
1銆佸鏁版嵁搴撶殑璁塊棶錛屽彲浠ユ湁閫夋嫨鎬х殑閫夊彇鏁版嵁搴撻噷鐨勪竴閮ㄥ垎淇℃伅錛?span style="color: #0000ff">鏁村紶琛ㄧ殑淇℃伅涓嶅澶栧紑鏀?/span>銆?.鐢ㄦ埛閫氳繃綆鍗曠殑鏌ヨ鍙互浠庡鏉傛煡璇腑寰楀埌緇撴灉銆?br />
瑙嗗浘鐨勭己鐐癸細
濡傛灉涓涓〃鐨勭粨鏋勬敼浜嗭紝鐩稿簲鐨勮鍥懼鏋滅敤鍒頒簡璇ヨ〃鐨勫瓧孌碉紝涔熻榪涜淇敼錛?span style="color: #0000ff">澧炲姞緇存姢宸ヤ綔閲?/span>銆?/span>
綆鍗曡鍥撅細鍙粠鍗曡〃閲岃幏鍙栨暟鎹紝涓嶅寘鍚嚱鏁板拰鏁版嵁緇勶紝鍙互瀹炵幇DML鎿嶄綔銆?/span>
澶嶆潅瑙嗗浘錛氫粠澶氳〃鑾峰彇鏁版嵁錛屽寘鍚嚱鏁板拰鏁版嵁緇勶紝涓嶅彲浠ML鎿嶄綔銆?br />
瑙嗗浘鐨勫垱寤猴細
CREATE [OR REPLACE] [FORCE|NOFORCE] VIEW view_name
[(alias[, alias]...)]
AS subquery
[WITH CHECK OPTION [CONSTRAINT constraint]]
[WITH READ ONLY]
鍏朵腑錛?br />
OR REPLACE錛氳嫢鎵鍒涘緩鐨勮瘯鍥懼凡緇忓瓨鍦紝ORACLE鑷姩閲嶅緩璇ヨ鍥撅紱
FORCE錛氫笉綆″熀琛ㄦ槸鍚﹀瓨鍦∣RACLE閮戒細鑷姩鍒涘緩璇ヨ鍥撅紱
NOFORCE錛氬彧鏈夊熀琛ㄩ兘瀛樺湪ORACLE鎵嶄細鍒涘緩璇ヨ鍥撅細
alias錛氫負瑙嗗浘浜х敓鐨勫垪瀹氫箟鐨勫埆鍚嶏紱
subquery錛氫竴鏉″畬鏁寸殑SELECT璇彞錛屽彲浠ュ湪璇ヨ鍙ヤ腑瀹氫箟鍒悕錛?br style="font-family: " />
WITH CHECK OPTION 錛氭彃鍏ユ垨淇敼鐨勬暟鎹蹇呴』婊¤凍瑙嗗浘瀹氫箟鐨勭害鏉燂紱
WITH READ ONLY 錛氳瑙嗗浘涓婁笉鑳借繘琛屼換浣旸ML鎿嶄綔銆?/span>
渚嬪錛?br />
CREATE OR REPLACE VIEW dept_sum_vw
(name,minsal,maxsal,avgsal)
AS SELECT d.dname,min(e.sal),max(e.sal),avg(e.sal)
FROM emp e,dept d
WHERE e.deptno=d.deptno
GROUP BY d.dname;
鏌ヨ瑙嗗浘錛?span style="color: #008000">select * from user_views;
淇敼瑙嗗浘錛?span style="color: #008000">閫氳繃OR REPLACE 閲嶆柊鍒涘緩鍚屽悕瑙嗗浘鍗沖彲銆?/span>
鍒犻櫎瑙嗗浘錛?span style="color: #008000">DROP VIEW VIEW_NAME;
瑙嗗浘鐨勫畾涔夊師鍒欙細
1.瑙嗗浘鐨勬煡璇㈠彲浠ヤ嬌鐢ㄥ鏉傜殑SELECT璇硶錛屽寘鎷繛鎺?鍒嗙粍鏌ヨ鍜屽瓙鏌ヨ錛?br />
2.鍦ㄦ病鏈塛ITH CHECK OPTION鍜?READ ONLY 鐨勬儏鍐典笅錛屾煡璇腑涓嶈兘浣跨敤ORDER BY 瀛愬彞錛?br />
3.濡傛灉娌℃湁涓篊HECK OPTION綰︽潫鍛藉悕錛岀郴緇熶細鑷姩涓轟箣鍛藉悕錛屽艦寮忎負SYS_Cn;
4.OR REPLACE閫夐」鍙互涓嶅垹闄ゅ師瑙嗗浘渚垮彲鏇存敼鍏跺畾涔夊茍閲嶅緩錛屾垨閲嶆柊鎺堜簣瀵硅薄鏉冮檺銆?br />
瑙嗗浘涓婄殑DML鎿嶄綔錛屽簲閬靛驚鐨勫師鍒欙細
1.綆鍗曡鍥懼彲浠ユ墽琛孌ML鎿嶄綔錛?br />
2.鍦ㄨ鍥懼寘鍚獹ROUP 鍑芥暟錛孏ROUP BY瀛愬彞錛孌ISTINCT鍏抽敭瀛楁椂涓嶈兘鍒犻櫎鏁版嵁琛岋紱
3.鍦ㄨ鍥句笉鍑虹幇涓嬪垪鎯呭喌鏃跺彲閫氳繃瑙嗗浘淇敼鍩鴻〃鏁版嵁鎴栨彃鍏ユ暟鎹細
a.瑙嗗浘涓寘鍚獹ROUP 鍑芥暟錛孏ROUP BY瀛愬彞錛孌ISTINCT鍏抽敭瀛楋紱
b.浣跨敤琛ㄨ揪寮忓畾涔夌殑鍒楋紱
c .ROWNUM浼垪銆?br />
d.鍩鴻〃涓湭鍦ㄨ鍥句腑閫夋嫨鐨勫叾浠栧垪瀹氫箟涓洪潪絀轟笖鏃犻粯璁ゅ箋?/p>
WITH CHECK OPTION 瀛愬彞闄愬畾錛?br />
閫氳繃瑙嗗浘鎵ц鐨処NSERTS鍜孶PDATES鎿嶄綔涓嶈兘鍒涘緩璇ヨ鍥炬绱笉鍒扮殑鏁版嵁琛?/span>錛屽洜涓哄畠浼氬鎻掑叆鎴栦慨鏀圭殑鏁版嵁琛屾墽琛屽畬鏁存х害鏉熷拰鏁版嵁鏈夋晥鎬ф鏌ャ?br />
渚嬪錛?br />
CREATE OR REPLACE VIEW vw_emp20
AS SELECT * FROM emp
WHERE deptno=20
WITH CHECK OPTION constraint vw_emp20_ck;
瑙嗗浘 宸插緩绔嬨?br />
鏌ヨ緇撴灉錛?br />
SELECT empno,ename,job FROM vw_emp20;
EMPNO ENAME JOB
--------------------- -------------- -------------
7369 SMITH CLERK
7566 JONES MANAGER
7902 FORD ANALYST
淇敼錛?br />
UPDATE vw_emp20
SET deptno=20
WHERE empno=7902;
灝嗕駭鐢熼敊璇細
UPDATE vw_emp20
*
ERROR 浣嶄簬絎竴琛岋細
ORA-01402錛氳鍥網ITH CHECK OPTION 榪濆弽WHERE 瀛愬彞
綰︽潫鏉′歡鏈?涓細闈炵┖銆佸敮涓銆佷富閿佸閿乧heck銆?br />
create table stu
(
id number(6), --primary key
name varchar2(20) constraint stu_name_nn not null, --stu_name_nn鍒悕
sex number(1),
age number(3),
sdate date,
grade number(2) default 1,
class number(4), --references class(id)
email varchar2(50),
--email varchar2(50) unique --瀛楁綰х害鏉燂紝涓嶈兘鏈夐噸澶嶅?br />
constraint stu_name_email_uni unique(name,email), --琛ㄧ駭綰︽潫
constraint stu_id_pk primary key(id), --琛ㄧ駭綰︽潫
constraint stu_class_fk foreign key(class) references class(id) --琚弬鑰冨瓧孌靛繀欏繪槸涓婚敭
);
create table class
(
id number(4) primary key,
name varchar2(20) not null
)
alter table stu add(addr varchar2(100)); --瀵瑰凡瀛樺湪鐨勮〃鏂板瀛楁
alter table stu modify(addr varchar2(150)); --瀵瑰瓧孌典慨鏀?br />
alter table stu drop (addr); --鍒犻櫎涓涓瓧孌?br />
alter table stu drop constraint stu_class_fk;
delete from class;
drop table class;
DML錛坉ata manipulation language錛夛細瀹冧滑鏄疭ELECT銆乁PDATE銆両NSERT銆丏ELETE錛屽氨璞″畠鐨勫悕瀛椾竴鏍鳳紝榪?鏉″懡浠ゆ槸鐢ㄦ潵瀵規暟鎹簱閲岀殑鏁版嵁榪涜鎿嶄綔鐨勮璦銆?/p>
conn sys/sys as sysdba;
drop user pcisv6 cascade;
exp --澶囦喚scott鐢ㄦ埛涓嬬殑琛?br />
--鍒涘緩鐢ㄦ埛,identified涓鴻璇佺浉褰撴槸瀵嗙爜錛宷uota閰嶉灝辨槸鍒嗛厤絀洪棿銆?br />
create user pcisv6 identified by 11 default tablespace core6 quota 10M on corev6
grant create session,create table,create view to pcisv6; --鎺堟潈錛宻ession鏄敤浜庣櫥褰曠殑
imp --瀵煎叆scott鐢ㄦ埛涓嬬殑琛?br />
SELECT錛?br />
select rownum r,ename from emp; --rownum琛屾暟錛岀洰鍓嶅彧鑳戒嬌鐢?lt;銆?lt;=, 鑰屾病鏈夌洿鎺?gt;銆?鐨勫啓娉曘?br />
select ename, sal --姹傝柂姘存渶楂樼殑鍓?浜?br />
from (select ename, sal from emp order by sal desc)
where rownum <= 5;
--姹傝柂姘存渶楂樼殑鍓?鍒?0浜?br />
select ename,sal,rownum r from emp order by sal desc; --r 鎺掑簭娣蜂貢
select ename,sal,rownum r from (select ename,sal from emp order by sal desc); --姝ゆ椂r搴忓彿鎸夋柊琛ㄦ帓搴?br />
select ename, sal -- 姝ゅ涓虹粨鏋?br />
from (select ename, sal, rownum r
from (select ename, sal from emp order by sal desc))
where r >= 6
and r <= 10;
UPDATE錛?br />
update emp2 set sal=sal*12,ename=ename||'-' where deptno=10;
DELETE錛?br />
delete from dept2 where deptno<25;
rollback;
TRANSACTION錛?br />
transaction 璧峰涓鏉ml璇彞錛屽湪commit銆乺ollback鏃跺畬鎴愩?br />
transaction 鍦ㄦ墽琛宒ml鍚庯紝鍦ㄥ叾鍚庢湁鎵ц浜哾dl銆乨cl鏃訛紝浜嬪姟鑷姩鎻愪氦銆?br />
鍦ㄦ甯擱鍑篹xit鏃訛紝浜嬪姟鑷姩鎻愪氦銆?br />
鍦ㄩ潪姝e父閫鍑烘椂錛屼簨鍔″洖婊氥?br />
------------------------------------------------------------
渚嬪瓙錛?br />
鏈?涓〃S錛孋錛孲C
S錛圫NO錛孲NAME錛変唬琛紙瀛﹀彿錛屽鍚嶏級
C錛圕NO錛孋NAME錛孋TEACHER錛変唬琛紙璇懼彿錛岃鍚嶏紝鏁欏笀錛?
SC錛圫NO錛孋NO錛孲CGRADE錛変唬琛紙瀛﹀彿錛岃鍙鋒垚緇╋級
闂錛?
1錛屾壘鍑烘病閫夎繃“榛庢槑”鑰佸笀鐨勬墍鏈夊鐢熷鍚嶃?
2錛屽垪鍑?闂ㄤ互涓婏紙鍚?闂級涓嶅強鏍煎鐢熷鍚嶅強騫沖潎鎴愮嘩銆?
3錛屽嵆瀛﹁繃1鍙瘋紼嬫湁瀛﹁繃2鍙瘋鎵鏈夊鐢熺殑濮撳悕銆?
璇風敤鏍囧噯SQL璇█鍐欏嚭絳旀錛屾柟璦涔熻錛堣璇存槑鏄嬌鐢ㄤ粈涔堟柟璦錛夈?
1.
select sname froms
join sc on (s.sno = sc.sno)
join c(c.cno = sc.cno)
where c.cteacher <> 'liming';
2.
select sname
where sno in (select sno
from sc
where scgrade < 60
group by sno
having count(*) >= 2);
3.
select sname
where sno in (select sno
from sc
where cno = 1
and sno in (select sno from sc where cno = 2));
--姹傞儴闂ㄤ腑鍝簺浜虹殑钖按鏈楂?br />
select ename,sal from emp
join (select max(sal) max_sal,deptno from emp group by deptno) t
on (emp.sal = t.max_sal and emp.deptno = t.deptno);
--姹傞儴闂ㄥ鉤鍧囪柂姘寸殑絳夌駭
select deptno,avg_sal,grade from
(select deptno,avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal);
--姹傞儴闂ㄥ鉤鍧囩殑钖按絳夌駭
select avg(grade) from
(select deptno,ename,grade from emp join salgrade s on (emp.sal between s.losal and s.hisal )) t
group by deptno;
--闆囧憳涓湁鍝簺浜烘槸緇忕悊浜?br /> select ename from emp where empno in (select distinct mgr from emp);
--涓嶅噯鐢ㄧ粍鍑芥暟錛屾眰钖按鐨勬渶楂樺箋傞噰鐢ㄧ殑鏄嚜榪炴帴銆?br />
select distinct sal from emp where sal not in
(select distinct e1.sal from emp e1 join emp e2 on (e1.sal < e2.sal));
--姹傚鉤鍧囪柂姘存渶楂樼殑閮ㄩ棬鐨勯儴闂ㄧ紪鍙楓傚祵濂楃殑緇勫嚱鏁般?br />
select deptno,avg_sal from
(select avg(sal) avg_sal,deptno from emp group by deptno)
where avg_sal =
(select max(avg(sal)),deptno from emp group by deptno;
--姹傚鉤鍧囪柂姘寸殑絳夌駭鏈浣庣殑閮ㄩ棬鐨勯儴闂ㄥ悕縐般?br />
select dname,t1.deptno,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 (t.avg_sal between s.losal and s.hisal)
)
t1
join dept on (t1.deptno = dept.deptno)
)
where t1.grade =
(
select min(grade) from
(select deptno,grade,avg_sal from
(select deptno,grade,avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal)
)
)
--姹傚鉤鍧囪柂姘寸殑絳夌駭鏈浣庣殑閮ㄩ棬鐨勯儴闂ㄥ悕縐般傞噰鐢ㄨ鍥俱?br />
conn sys/sys as sysdba;
grant create table,create view to scott;
create view v$_dept_avg_sal_info as
select deptno,grade,avg_sal from
(select deptno,grade,avg(sal) avg_sal from emp group by deptno) t
join salgrade s on (t.avg_sal between s.losal and s.hisal);
select dname,t1.deptno,grade,avg_sal from
v$_dept_avg_sal_info t1
join dept on (t1.deptno = dept.deptno)
)
where t1.grade =
(
select min(grade) from v$_dept_avg_sal_info
)
-- 姣旀櫘閫氬憳宸ョ殑鏈楂樿柂姘磋繕瑕侀珮鐨勭粡鐞嗕漢鍚嶇О銆?br />
select ename 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)
)
--1999騫磗ql鏍囧噯,榪炴帴鏉′歡鍜岃繃婊ゆ潯浠跺垎寮
select ename,dname,grade
from emp e join dept d on (e.deptno = d.deptno)
join salgrade s on (e.sal between s.losal and s.hisal)
where ename not like '_A%';
select sal from emp where sal>to_number('$1,250.00','$9,999.99');
select ename,sal*12 + nvl(comm,0) from emp; --瀵圭┖鍊煎鐞?br />
緇勫嚱鏁幫細
select max(sal) from emp;
select min(sal) from emp;
select avg(sal) from emp;
select sum(sal) from emp;
select count(*) from emp; -- *姹傚嚭鎬昏褰曟暟, count(comm)姹傚嚭璇ュ垪涓嶄負絀虹殑鍊箋?br />
select deptno,job,max(sal) from emp group by deptno,job; --鎸夌収鏉′歡緇勫悎鍒嗙粍
select ename from emp where sal =(select max(sal) from emp); --瀛愭煡璇?br />
update Web_Bas_Edr_Rsn set c_rsn_txt=REPLACE(c_rsn_txt,'澶╂觸','鍖椾含') where c_rsn_txt like '%澶╂觸%' --鎵歸噺鏇挎崲
-- having瀵瑰垎緇勮繘琛岄檺鍒訛紝where瀵瑰崟琛岄檺鍒?/span>
select avg(sal) from emp where sal>1000 group by deptno having avg(sal) >1500 order by avg(sal) desc;
CREATE OR REPLACE PROCEDURE V6.P_WEB_CUS_CLINT_DPT
IS
--澧為噺鎶藉彇瀹㈡埛淇℃伅鏁版嵁
v_task_start_date date ;
v_task_end_date date ;
v_sql_code number :=0 ;
v_sql_msg VARCHAR2(4000) := '' ; --sql閿欒淇℃伅
V_Cus_Client Web_Cus_Client%rowtype ;
V_UPD_TM date;
V_APP_NO varchar2(50);
V_DPT_CDE varchar2(50);
V_COUNT number(4,0);
cursor CUR_WEB_CUS_ADD is
select *
from Web_Cus_Client
a where a.C_DPT_CDE is null;
BEGIN
SELECT SYSDATE INTO v_task_start_date FROM dual; --浠誨姟寮濮嬫椂闂村拰浠誨姟緇撴潫鏃墮棿
SELECT SYSDATE INTO v_task_end_date FROM dual;
v_sql_msg := '瀵筗EB_CUS_CLENT鏈烘瀯涓虹┖鐨勮繘琛屼慨鏀?;
open CUR_WEB_CUS_ADD;
loop
fetch CUR_WEB_CUS_ADD into V_Cus_Client;
exit when CUR_WEB_CUS_ADD% notfound;
v_sql_msg := V_Cus_Client.c_Clnt_Cde||'瀵筗EB_CUS_CLENT鏈烘瀯涓虹┖鐨勮繘琛屼慨鏀?;
V_COUNT :=0;
select count(1) into V_COUNT from WEB_PLY_APPLICANT a where a.C_APP_CDE=V_Cus_Client.c_Clnt_Cde;
if(V_COUNT>0) then
select max(T_CRT_TM) into V_UPD_TM from WEB_PLY_APPLICANT a where a.C_APP_CDE=V_Cus_Client.c_Clnt_Cde;
select max(C_APP_NO) into V_APP_NO from WEB_PLY_APPLICANT a where a.T_CRT_TM=V_UPD_TM and a.C_APP_CDE=V_Cus_Client.c_Clnt_Cde;
select C_DPT_CDE into V_DPT_CDE from web_PLY_BASE a where a.C_APP_NO=V_APP_NO;
update WEB_CUS_CLIENT a set a.C_DPT_CDE=V_DPT_CDE where a.C_CLNT_CDE=V_Cus_Client.c_Clnt_Cde;
end if;
commit;
end loop;
close CUR_WEB_CUS_ADD;
--鍐欎換鍔℃棩蹇?br />
v_sql_code :=0;
v_sql_msg := 'NORMAL, SUCCESSFUL COMPLETION';
SELECT SYSDATE INTO v_task_end_date FROM dual;
INSERT INTO LOAD_HIS_LOG
( SYS
,JOBNAME
,START_DATE
,END_DATE
,RUN_DATE
,SQL_CODE
,SQL_STATE
)
VALUES
('V5_MID'
,'P_WEB_CUS_CLINT_DPT'
,v_task_start_date
,v_task_end_date
,to_char((v_task_end_date - v_task_start_date) * 86400)
,v_sql_code
,v_sql_msg
);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
v_sql_code := SQLCODE;
v_sql_msg := v_sql_msg || ' ' || ' : ' || SQLERRM;
SELECT SYSDATE INTO v_task_end_date FROM dual; --浠誨姟緇撴潫鏃墮棿
ROLLBACK;
INSERT INTO LOAD_HIS_LOG
( SYS
,JOBNAME
,START_DATE
,END_DATE
,RUN_DATE
,SQL_CODE
,SQL_STATE
)
VALUES
('V5_MID'
,'P_WEB_CUS_CLINT_DPT'
,v_task_start_date
,v_task_end_date
,to_char((v_task_end_date - v_task_start_date) * 86400)
,v_sql_code
,v_sql_msg
);
COMMIT;
END ;