標籤:資料 預存程序的調用 others highlight etc 結果 賦值 log 用法
--PL/SQL基礎知識學習--一、PL/SQL語句塊,基礎文法格式DECLARE --變數聲明列表 info varchar(25); --變數聲明 stu_unm integer := 15;BEGIN --語句塊 info := ‘soulsjie‘; --變數的賦值 DBMS_OUTPUT.put(‘HELLO WORLD!‘); --輸出不換行 DBMS_OUTPUT.put_line(info || stu_unm); --輸出換行 ||為字串的串連符 --異常處理塊END;--1.迴圈--1.1for迴圈DECLAREi INTEGER :=1;j INTEGER :=10;BEGIN FOR S IN i .. j LOOP DBMS_OUTPUT.put_line(‘序號是‘||S); END LOOP;END;--1.2if語句DECLAREchengji integer;BEGIN chengji :=&temp; DBMS_OUTPUT.put_line(‘您輸入的成績是:‘||chengji); IF chengji>90 THEN --注意不需要‘;’號 DBMS_OUTPUT.put_line(‘優秀‘); ELSIF chengji>=60 THEN --注意不是ELSEIF DBMS_OUTPUT.put_line(‘及格‘); ELSE DBMS_OUTPUT.put_line(‘不及格‘); END IF;END;--1.3while迴圈DECLAREchengji integer :=10;BEGIN WHILE chengji>0 LOOP DBMS_OUTPUT.put_line(chengji); chengji :=chengji-1; END LOOP;END;--1.4do whlie 迴圈DECLAREi INTEGER :=12; BEGIN LOOP DBMS_OUTPUT.put_line(i); i:=i-1; EXIT WHEN i=0; END LOOP; END; --1.5case 語句DECLARE i VARCHAR(20);BEGIN i :=‘&temp‘; CASE i WHEN ‘y‘ THEN DBMS_OUTPUT.put_line(‘您選擇了是‘); WHEN ‘n‘ THEN DBMS_OUTPUT.put_line(‘您選擇了否‘); ELSE DBMS_OUTPUT.put_line(‘預設項‘); END case; END; SELECT I.STU_ID 學號, (CASE I.STU_SEX WHEN ‘男‘ THEN ‘1‘ WHEN ‘女‘ THEN ‘0‘ ELSE ‘未知‘ END) FROM STU_INFO I; --1.6 GOTO 語句--建立節點,跳轉到指定節點DECLARE BEGIN <<a>> DBMS_OUTPUT.put_line(‘A‘); goto c; <<b>> DBMS_OUTPUT.put_line(‘B‘); <<c>> DBMS_OUTPUT.put_line(‘C‘); END; --2.SELECT INTO 的用法。統計學生資訊表中的學生總數 --select into 將查詢到的結果賦給變數 DECLARE TEMP INTEGER; us_name VARCHAR(20); BEGIN SELECT COUNT(*) INTO TEMP FROM (SELECT DISTINCT STU_ID FROM STU_INFO);--查詢學生資訊記錄條總數 DBMS_OUTPUT.put_line(‘總記錄條數有‘||TEMP||‘條‘); SELECT I.STU_NAME INTO us_name FROM STU_INFO I WHERE I.STU_ID=‘180301‘;--查詢指定帳號的學生姓名 DBMS_OUTPUT.put_line(‘姓名是:‘||us_name); END; --3.cursor 利用遊標讀取資料 遍曆一個記錄集 --%ISOPEN(遊標是否已經開啟) /%FOUND(遍曆到資料) /%NOTFOUND(未遍曆到資料) /%ROWCOUNT(遍曆到資料的記錄條數) DECLARE CURSOR youbiao1 IS SELECT * FROM STU_INFO I WHERE I.STU_SEX=‘男‘; --a.建立一個遊標 temp youbiao1%rowtype;--b.建立一個變數 記錄每行內容 BEGIN IF NOT youbiao1%ISOPEN THEN OPEN youbiao1;--c.若該遊標未開啟則開啟該遊標 DBMS_OUTPUT.put_line(‘遊標已被開啟‘); END IF; LOOP --d.利用迴圈讓遊標讀取資料 FETCH youbiao1 INTO temp; EXIT WHEN youbiao1%NOTFOUND;--e.當記錄讀取完畢跳出迴圈 DBMS_OUTPUT.put_line(temp.STU_NAME); END LOOP; CLOSE youbiao1;--f.關閉遊標 DBMS_OUTPUT.put_line(‘遊標已關閉‘); END; --4.異常處理 DECLARE aa INTEGER; BEGIN aa:=1/0;--函數執行 EXCEPTION WHEN OTHERS THEN--異常處理塊 DBMS_OUTPUT.put_line(‘出現異常!‘); END; --二、函數的建立和使用/*基本格式 CREATE [OR REPLACE] FUNCTION FUN_NAME [(參數1 參數類型, 參數2 參數類型, 參數n 參數類型)] RETURN 傳回值類型ISBEGIN 函數體 RETURN 具體的傳回值; END FUN_NAME;*/--建立無參數函數CREATE OR REPLACE FUNCTION F_WUCANSHU RETURN INTEGERIS BEGIN RETURN 3+6; END F_WUCANSHU;SELECT F_WUCANSHU FROM DUAL;--函數的調用--建立有參函數CREATE OR REPLACE FUNCTION F_YOUCANSHU(num1 INTEGER,num2 INTEGER) RETURN INTEGERISBEGIN RETURN (num1*num2); END F_YOUCANSHU;SELECT F_YOUCANSHU(&數字1,&數字2) 乘積是 FROM DUAL;--調用有參函數--建立函數 按照使用者輸入的學生學號查詢該學生的姓名資訊CREATE OR REPLACE FUNCTION F_SEARCH_NAME(stu_id VARCHAR) RETURN VARCHAR --注意參數的聲明不帶長度,如:(stu_id VARCHAR)IStemp VARCHAR(20);stu VARCHAR(20);BEGIN stu:=stu_id; SELECT DISTINCT STU_NAME INTO temp FROM STU_INFO WHERE STU_ID=stu;--將查詢到的學號儲存到變數temp中 RETURN temp;--將結果返回 END F_SEARCH_NAME;SELECT F_SEARCH_NAME(‘&請輸入要查詢的學號‘) 查詢結果 FROM DUAL;--三、過程的建立和使用--完成資料庫中特定的任務,可以永久儲存在資料庫中供其他程式使用--3.1過程建立的基本格式/*CREATE [OR REPLACE] PROCEDURE PRO_NAME [參數名 IN 參數類型, ... 參數N IN 參數N的類型]ISBEGIN //過程要執行的代碼體 END;*/CREATE OR REPLACE PROCEDURE insert_stuinfo(stu_id IN VARCHAR,--注意在聲明參數的類型時不加長度 與函數的參數聲明(canshu VARCHAR)不同stu_name IN VARCHAR,stu_class IN VARCHAR,stu_sex IN VARCHAR)ISBEGIN INSERT INTO STU_INFO VALUES(stu_id,stu_name,stu_class,stu_sex);--過程要執行的SQL語句塊 END;CALL insert_stuinfo(‘jie‘,‘jie‘,‘jie‘,‘jie‘);--預存程序的調用
PL/SQL函數和過程的建立和調用的基礎文法