SET SERVEROUTPUT ON;
DECLARE
CURSOR cur IS
SELECT * FROM books;
myrecord books%ROWTYPE;
BEGIN
OPEN cur;
LOOP
FETCH cur INTO books;
EXIT WHEN cur%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(books.id || ' ' || books.name);
END LOOP;
CLOSE cur;
END;
DECLARE1.3、使用顯示游標刪除或更新記錄
/* 定義帶參數游標 */
CURSOR cur_para(id varchar2) IS
SELECT books_name FROM books WHERE books_id = id;
BGEIN
/* 調用帶參數游標,并以 FOR 循環(huán)方式處理 */
FOR cur IN cur_para('0001') LOOP
DBMS_OUTPUT.PUT_LINE(cur.books_id || ' ' || cur.books_id);
END LOOP;
END;
BEGIN
FROM cur IN (SELECT name FROM deptment) LOOP
DBMS_OUTPUT.PUT_LINE(cur.books_id || ' ' || cur.books_id);
END LOOP;
END;
CREATE OR REPLACE PROCEDURE test (value IN varchar2, value2OUT NUMBER)
/* 參數,不需指定長(cháng)度或精度 */
IS
/* 局部變量,省略 DECLARE 關(guān)鍵字,需有長(cháng)度 */
identity NUMBER;
BEGIN
SELECT ITEMRATE INTO identity
FROM itemFile
WHERE itemcode = value;
IF identity < 200 THEN
value2 := 200;
ELSE
value2 :=50;
END IF;
END;
DECLARE● 單獨執行
tvalue2 NUMBER;
BEGIN
test('i202', tvalue2);
DBMS_OUTPUT.PUT_LINE('value2的值為:' || TO_CHAR(value2));
END;
CREATE OR REPLACE FUNCTION item_price_rage (price NUMBER)
/* 參數、指定返回類(lèi)型 */
RETURN varchar2
AS
/* 定義局部變量 */
min_price NUMBER;
max_price NUMBER;
BEGIN
SELECT MAX(ITEMRATE), MIN(ITEMRATE) INTO max_price, min_price
FROM itemfile;
IF price >= min_price AND price <= max_price THEN
RETURN '輸入的單價(jià)介于最低價(jià)與最高價(jià)之間';
ELSE
RETURN '超出范圍';
END IF;
END;
DECLARE● SELECT查詢(xún)調用(因為函數必須有返回值)
p NUMBER := 300;
MSG varchar2(200);
BEGIN
MSG := item_price_range(p);
DBMS_OUTPUT.PUT_LINE(MSG);
END;
CREATE OR REPLACE PACKAGE pack_me*創(chuàng )建 pack_me 包,并聲明了子程序 order_proc 和 order_fun,并交由程序包主體實(shí)現。
IS
PROCEDURE order_proc (orno varchar2);
FUNCTION order_fun (ornos varchar2) RETURN varchar2;
END pack_me;
CREATE OR REPLACE PACKAGE BODY pack_me
AS
/* 實(shí)現定義的存儲過(guò)程 */
PROCEDURE order_proc (orno varchar2)
IS
stst CHAR(1);
BEGIN
SELECT ostatus INTO stat FROM order_master
WHERE orderno = orno;
IF stat = 'p' THEN
DBMS_OUTPUT.PUT_LINE('暫掛的訂單');
ELSE
DBMS_OUTPUT.PUT_LINE('已完成的訂單');
END IF;
END order_proc;
/* 實(shí)現定義的函數 */
FUNCTION order_fun(ornos varchar2) RETURN varchar2
IS
icode varchar2(5);
ocode varchar2(5);
qtyord NUMBER;
qtydeld NUMBER;
BEGIN
SELECT qty_ord, qty_deld, itemcode, ordernc INTO qtyord, qtydeld,icode, ocode
FROM order_detail
WHERE orderno = ornos;
IF qtyord < qtydeld THEN
RETURN ocode;
ELSE
RETURN icode;
END IF;
END order_fun;
END pack_me;
DECLARE
msg varchar2(10);
BEGIN
msg := pack_me.order_fun('o002');
DBMS_OUTPUT.PUT_LINE('值是 ' || msg);
END;
聯(lián)系客服