;
帖子
3919 
精华
积分
11710 
鱼币
0 ¥ 
来自
大连 
在线时间
1858 小时 
注册时间
2007-6-11 
最后登录
2009-10-20 

贴图大师勋章新人进步勋章宣传大使勋章论坛元老勋章

3
发表于 2009-1-5 19:48 | 只看该作者
Oracle PL/SQL鍏ラ棬涔嬫渚嬪疄璺 - 缂栫▼搴 - Powered by SupeSite

浣犵殑浣嶇疆锛缂栫▼搴 >> 璧勮 >> 鏁版嵁搴撶鐞 >> SQL璇硶 >> 璇︾粏鍐呭 鍦ㄧ嚎鎶曠ǹ

Oracle PL/SQL鍏ラ棬涔嬫渚嬪疄璺

鍙戝竷: 2008-12-05 15:48 |  浣滆: 缃戠粶杞浇 |   鏉ユ簮: 缃戠粶杞浇 |  鏌ョ湅: 55娆

鍓嶉潰宸茬粡浜嗚В浜嗗叧浜嶱L/SQL缂栫▼鐨勫熀纭锛屾湰鏂囧皢缁撳悎涓涓渚嬫潵鍔犳繁瀵硅繖浜涚煡璇嗙偣鐨勭悊瑙c

銆銆涓锛 妗堜緥浠嬬粛

銆銆鏌愭暟鎹簱鏈変袱寮犺〃锛屾槸鍏充簬鏌愬叕鍙稿憳宸ヨ祫鏂欍佽柂姘村拰閮ㄩ棬淇℃伅鐨勶紝瀹冧滑鍒嗗埆鏄痚mp琛ㄥ拰dept琛紝涓ゅ紶琛ㄧ殑缁撴瀯濡備笅锛

 

銆銆瑕佹眰濡備笅锛

銆銆1銆佹寜鐓т笂琛ㄧ粨鏋勫缓绔嬬浉搴旂殑琛紝骞舵瘡寮犺〃鍐欏叆5缁勫悎娉曟暟鎹

銆銆2銆佹搷绾电浉鍏宠〃锛屼娇寰椻滄妧鏈儴鈥濈殑鍛樺伐鐨勮柂姘翠笂娑20%銆

銆銆3銆佸缓绔嬫棩蹇楋紝杩借釜钖按鍙樺姩鎯呭喌銆

銆銆4銆佸缓绔嬫祴璇曞寘銆

銆銆浜岋紟 妗堜緥鐨勫垎鏋愪笌瀹炵幇

銆銆浠庡墠闈㈡渚嬬殑浠嬬粛涓嶉毦鐪嬪嚭锛岃姹1鑰冨療鐐逛负鍩烘湰SQL璇彞锛涜姹2涓昏鑰冨療澶嶅悎鏌ヨ锛涜姹3鏄冨療瑙﹀彂鍣ㄧ殑搴旂敤锛涜姹4鐨勮冨療闈㈢浉瀵瑰涓浜涳紝涓嶄粎鑰冨療浜嗗寘鐨勫垱寤猴紝鑰屼笖涔熻冨療浜嗗湪PL/SQL涓殑娴嬭瘯鏂规硶銆備簡瑙d簡杩欎簺鑰冨療鐨勭煡璇嗙偣锛屽氨鍙互涓涓鍘昏В鍐炽

銆銆瑕佹眰1锛

銆銆棣栧厛鏍规嵁鍓嶉潰琛ㄧ殑缁撴瀯鍙互鍒涘缓涓ゅ紶琛細

銆銆鈥斺斿垱寤哄憳宸ヨ〃

create table emp (emp_id number(5), emp_name varchar2(20), emp_salary number(4));

銆銆鈥斺旈儴闂ㄨ〃

create table dept (dept_id number(3), dept_name varchar2(20), emp_id number(5));

銆銆寤虹珛浜嗚〃涔嬪悗灏卞彲浠ュ線琛ㄩ噷闈㈠啓鏁版嵁浜嗭紝杩欓噷鎶婃坊鍔犺〃璁板綍鐨勪唬鐮佸啓鍏ュ埌鐩稿簲鐨勫瓨鍌ㄨ繃绋嬨

/*缁檈mp琛ㄦ坊鍔犺褰曠殑瀛樺偍杩囩▼*/
create or replace procedure ins_table_emp(p_emp_id number,p_emp_name varchar2,p_emp_salary number) as
v_emp_id number:=p_emp_id;
v_emp_name varchar2(20):=p_emp_name;
v_emp_salary number:=p_emp_salary;
begin
銆insert into emp values (v_emp_id,v_emp_name,v_emp_salary);
end ins_table_emp;

/*缁檇ept琛ㄦ坊鍔犺褰曠殑瀛樺偍杩囩▼*/
create or replace procedure ins_table_dept(p_dept_id number,p_dept_name varchar2,p_emp_id number) as
銆v_dept_id number:=p_dept_id;
銆v_dept_name varchar2(20):=p_dept_name;
銆v_emp_id number:=p_emp_id;
begin
銆insert into dept values (v_dept_id,v_dept_name,v_emp_id);
end ins_table_emp;

/*璋冪敤鐩稿簲鐨勫瓨鍌ㄨ繃绋嬪疄鐜拌褰曟坊鍔*/
begin
銆ins_table_emp(10000,'',4000);
銆ins_table_emp(10001,'??猫y',2300);
銆ins_table_emp(10002,'3?t',3500);
銆ins_table_emp(10003,'脿???',3500);
銆ins_table_emp(10004,'谩?貌?',3500);

銆ins_table_dept(111,'DD?t2?',10000);
銆ins_table_dept(111,'DD?t2?',10001);
銆ins_table_dept(111,'DD?t2?',10002);
銆ins_table_dept(112,'??锚?2?',10003);
銆ins_table_dept(113,'锚D3?2?',10004);
end;

銆銆瑕佹眰2锛

銆銆缁欐寚瀹氶儴闂ㄧ殑鍛樺伐鍔犺柂锛岃繖瀹為檯涓婃槸涓涓鍚堟煡璇紝棣栧厛闇瑕佹妸鎵鏈夎閮ㄩ棬鐨勫憳宸ュ閫夊嚭鏉ワ紝鐒跺悗瀵硅繖浜涘憳宸ョ殑钖按杩涜鐩稿簲鐨勬敼鍔ㄣ備緷鐓ц繖涓鎬濊矾锛屼唬鐮佸涓嬶細

銆銆锛堥渶瑕佹敞鎰忕殑鏄細灏嗚鍔犺柂鐨勯儴闂ㄤ綔涓哄弬鏁帮紝杩欐牱鐨勫瓨鍌ㄨ繃绋嬫洿鏈夌伒娲绘с傦級

create or replace procedure add_salary(p_dept_name varchar2) as
v_dept_name varchar2(20):=p_dept_name;
begin
銆update emp set emp.EMP_SALARY=emp.EMP_SALARY*1.2 where emp.EMP_ID in (select emp.EMP_ID from emp,dept where emp.EMP_ID=dept.EMP_ID and dept.DEPT_ID='??锚?2?');
end add_salary;

銆銆瑕佹眰3锛

銆銆寤虹珛鏃ュ織瀵硅柂姘寸殑鍙樺姩鎯呭喌褰㈡垚涓涓拷韪紝涔熷氨鏄锛屽鏋滃鏌愪釜鑱屽憳鐨勮柂姘磋繘琛屽彉鏇村氨搴旇灏嗗叾鐩稿簲鐨勫彉鏇磋褰曞叏閮ㄨ涓嬫潵銆傚鏋滃emp琛ㄧ殑salary瀛楁鍒涘缓涓涓Е鍙戝櫒锛屾潵鐩戣瀵箂alary鐨勬洿鏀癸紝鎶婃瘡娆℃洿鏀硅繘琛岃褰曪紝杩欐牱灏辫揪鍒颁簡瑕佹眰3鐨勭洰鐨勪簡銆

create or replace trigger print_salary_change 銆
before delete or insert or update on emp銆銆--瑙﹀彂浜嬩欢
for each row銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆銆-- 姣忎慨鏀逛竴琛岄兘闇瑕佽皟鐢ㄦ杩囩▼

declare 銆銆銆銆銆銆銆銆銆銆--鍙湁瑙﹀彂鍣ㄧ殑澹版槑闇瑕乨eclare锛岃繃绋嬪拰鍑芥暟閮戒笉闇瑕
salary_balance number;
begin
--:new 涓:old鍒嗗埆浠h〃璇ヨ鍦ㄤ慨鏀瑰墠鍜屼慨鏀瑰悗鐨勮褰
salary_balance=:new.salary=:old.salary;
dbms_output.PUT_LINE('old salary is: '|| :old.salary);
dbms_output.PUT_LINE('old salary is: '|| :new.salary);
dbms_output.PUT_LINE('old salary is: '|| to_char(salary_balance));
end print_salary_change;

銆銆瑕佹眰4锛

銆銆涓庡叾浠栬瑷锛坈/c++绛夛級鐩告瘮锛孭L/SQL鐨勬祴璇曟湁鍏朵笉鍚屼箣澶勶紝褰掔撼涓嬫潵鏈変笁绉嶆柟娉曪細

銆銆1銆佷娇鐢―BMS_OUTPUT鍖呯殑PUT_LINE鏂规硶鏉ユ樉绀轰腑闂村彉閲忥紝浠ユ鏉ヨ瀵熺▼搴忔槸鍚﹀瓨鍦ㄩ昏緫閿欒銆

銆銆2銆佹彃鍏ユ祴璇曡〃鐨勬柟娉曘傚嵆鍒涘缓涓涓复鏃剁殑涓棿琛紝鐒跺悗鎶婃墍鏈夋秹鍙婂埌鐨勪腑闂村彉閲忕殑缁撴灉閮戒綔涓鸿褰曟彃鍏ュ埌涓棿琛ㄤ腑锛岃繖鏍峰彲浠ユ煡璇㈣〃涓殑缁撴灉鏉ヨ瀵熺▼搴忕殑鎵ц鎯呭喌銆

銆銆3銆佷娇鐢ㄥ紓甯稿鐞嗘墜娈碉紝瀵瑰彲鐤戠殑绋嬪簭娈典娇鐢╞egin 鈥 end 锛岀劧鍚庡彲浠ュ湪exception閲岃繘琛屽紓甯告崟鑾峰鐞嗐

銆銆杩欓噷鍑嗗浣跨敤绗簩绉嶆柟娉曟潵寤虹珛涓涓祴璇曞寘锛孭L/SQL閲屽寘鐨勬蹇电被浼间簬闈㈠悜瀵硅薄閲岀殑绫荤殑姒傚康锛屽寘灏嗕竴缁勬搷浣滃拰灞炴у皝瑁呭湪涓璧凤紝涓嶄粎澧炲己浜嗙▼搴忕殑妯″潡鍖栵紝鑰屼笖鐢变簬灏佽浜嗘洿澶氱殑鎿嶄綔鍜屽睘鎬ц屾彁楂樹簡鎵ц鏁堣兘銆傚缓绔嬩竴涓狿L/SQL闇瑕佷袱涓楠わ細棣栧厛瑕佸缓绔嬪寘澶达紝绫讳技浜庡缓绔嬩竴涓被鐨勫ご鏂囦欢锛岄噷闈富瑕佸鍖呬腑鐨勮繃绋嬶紝鍑芥暟鍜屽彉閲忕殑澹版槑锛涚浜岄儴鍒嗕富瑕佹槸鍖呬綋閮ㄥ垎锛屽疄鐜板墠闈㈠0鏄庣殑杩囩▼鍜屽嚱鏁帮紝鍙﹀杩橀渶瑕佸鍖呰繘琛屽垵濮嬪寲绛夊伐浣溿

銆銆鏍规嵁杩欎竴鎬濊矾锛屽缓绔嬫祴璇曞寘濡備笅锛

/*鍖呭ご閮ㄥ垎*/
create or replace package debug as
procedure debug(v_description varchar2,v_valueOfvariable varchar2)
銆procedure reset;
銆v_numberOfLine number;
end debug;
/*鍖呬綋閮ㄥ垎*/
create or replace package body debug as
procedure debug(v_description varchar2,v_valueOfvariable varchar2) is
begin
銆insert into debugtable
銆values(v_numberOfLine,v_description,v_valueOfvariable);
銆v_numberOfLine:=v_numberOfLine+1;
end debug;
procedure reset is
begin
銆v_numberOfLine:=1;
銆delete from debugtable;
end reset;
/*鍒濆鍖栭儴鍒*/
begin
銆reset;
end debug;

銆銆涓夛紟灏忕粨

銆銆缁煎悎鍓嶉潰瀵4涓棶棰樼殑瑙g瓟锛屽熀鏈妸PL/SQL鐨勪富瑕侀儴鍒嗚瀺浼氳繘鏉ヤ簡锛岃櫧鐒跺緢澶氬湴鏂瑰彧鏄秹鍙婂埌姣旇緝绮楁祬鐨勫眰娆★紝浣嗘槸鏈変簡杩欎竴鍩虹锛屾繁鍏ヤ笅鍘讳篃鏄笉闅剧殑銆

銆銆鎬讳箣锛孭L/SQL缂栫▼涓庡叾浠栬瑷缂栫▼鏈変竴瀹氱殑鍖哄埆锛岃鑰呭彧鏈夋妸鎻″ソ鍏剁壒鐐规墠鑳芥洿濂界殑鎺屾彙鏁版嵁搴撳紑鍙戠殑鏂归潰鐭ヨ瘑銆
TAG: Oracle ORACLE sql SQL 鍏ラ棬 瀹炶返
鎵撳嵃 | 鏀惰棌姝ら〉 |  鎺ㄨ崘缁欏ソ鍙 | 涓炬姤
涓婁竴绡 涓嬩竴绡
 

璇勫垎锛0

鍙戣〃璇勮
鏌ョ湅鍏ㄩ儴鍥炲銆愬凡鏈0浣嶇綉鍙嬪彂琛ㄤ簡鐪嬫硶銆