create or replace procedure p_hello(i_name in nvarchar2, o_result out nvarchar2) is begin o_result := 'Hello' || ';' || i_name; end p_hello;
CREATE OR REPLACE PROCEDURE CHANGE_MONEY(ADDMONEY IN NUMBER) IS CURSOR CUR IS SELECT * FROM MONEY; C_ROW MONEY%ROWTYPE; BEGIN OPEN CUR; FETCH CUR INTO C_ROW; WHILE CUR%FOUND LOOP IF C_ROW.MONTH < 3 THEN UPDATE MONEY SET MONEY.MONEY = (C_ROW.MONEY + ADDMONEY); END IF; FETCH CUR INTO C_ROW; END LOOP; CLOSE CUR; COMMIT; END CHANGE_MONEY; 说明: (1) 这里需要定义一个游标,还要定义一个emp%rowtype类型的变量,%前面是表名,后面表示这个表的一行, (2) 在使用游标前还要显示的打开游标,并将其赋值到row中,使用后关闭游标。 (3) C%found表示只有row中有值的时候才会进行循环。 (4) 经过对比发现于while循环相比,for循环更像是C#中的foreach,使用起来方便很多。 (5) fetch into把当前游标提取的值赋值给变量
o_result out nvarchar2) is
begin
o_result := 'Hello' || ';' || i_name;
end p_hello;
CURSOR CUR IS
SELECT * FROM MONEY;
C_ROW MONEY%ROWTYPE;
BEGIN
OPEN CUR;
FETCH CUR INTO C_ROW;
WHILE CUR%FOUND LOOP
IF C_ROW.MONTH < 3 THEN
UPDATE MONEY
SET MONEY.MONEY =
(C_ROW.MONEY + ADDMONEY);
END IF;
FETCH CUR INTO C_ROW;
END LOOP;
CLOSE CUR;
COMMIT;
END CHANGE_MONEY;
说明:
(1) 这里需要定义一个游标,还要定义一个emp%rowtype类型的变量,%前面是表名,后面表示这个表的一行,
(2) 在使用游标前还要显示的打开游标,并将其赋值到row中,使用后关闭游标。
(3) C%found表示只有row中有值的时候才会进行循环。
(4) 经过对比发现于while循环相比,for循环更像是C#中的foreach,使用起来方便很多。
(5) fetch into把当前游标提取的值赋值给变量