gistfile1.txt /* Oracle PL/SQL-------------------------过程,函数,游标,触发器----------------------------存储过程 CREATE [OR REPLACE] PROCEDURE pname [ (param1 [mode1] type1, param2 [mode2] type2, …)] IS | AS BEGIN 执行代码
/* Oracle PL/SQL -------------------------过程,函数,游标,触发器-------------------------- --存储过程 CREATE [OR REPLACE] PROCEDURE pname [ (param1 [mode1] type1, param2 [mode2] type2, …)] IS | AS BEGIN 执行代码 END [pname] pname:过程名称 param1、param2:形参名称 mode1、mode2:参数模式,包括IN(默认)、OUT、IN OUT type1、type2:参数数据类型 SQL窗体执行存储过程:begin 存储过程名称 end SQL命令窗体执行存储过程:exec 存储过程名称 查询所有过程:select * from user_objects where object_type='PROCEDURE' 特点:存储过程可以直接运行,可以返回多个值 ------------------------------------------------------------------------ 2.函数 CREATE [OR REPLACE] FUNCTION fname [(param1 [mode1] type1, param2 [mode2] type2, )] return type IS | AS BEGIN 执行代码块 END [fname] 注意:函数一定要有返回值 查询所有函数:select object_name from user_objects where object_type='FUNCTION'; ------------------------------------------------------------------------ 3.游标 ------------------ SQL语句 游标 非查询语句 隐式的 结果是单行的查询语句 隐式的或显示的 结果是多行的查询语句 显示的 ------------------ 隐式游标属性: SQL%FOUND – 语句影响了一行或多行时为 TRUE SQL%NOTFOUND – 语句没有影响任何行时为TRUE SQL%ROWCOUNT – 语句影响的行数 SQL%ISOPEN - 游标是否打开,始终为FALSE ------------------ 显式游标 a.定义: CURSOR cursor_name[(parameter[, parameter]…)] [RETURN datatype] IS select_statement; b.打开游标 OPEN cursor_name[([parameter =>] value[, [parameter =>] value]…)]; c.提取游标数据 FETCH cursor_name INTO {variable_list | record_variable }; d.关闭游标 CLOSE cursor_name; 案例1:查询前10名员工的信息。 DECLARE CURSOR c_cursor IS SELECT first_name || last_name, Salary FROM EMPLOYEES WHERE rownum<11; v_ename EMPLOYEES.first_name%TYPE; v_sal EMPLOYEES.Salary%TYPE; BEGIN OPEN c_cursor; FETCH c_cursor INTO v_ename, v_sal; WHILE c_cursor%FOUND LOOP DBMS_OUTPUT.PUT_LINE(v_ename||'---'||to_char(v_sal) ); FETCH c_cursor INTO v_ename, v_sal; END LOOP; CLOSE c_cursor; END; ------------------------- y----------------------------------------------- 3.触发器 CREATE OR REPLACE TRIGGER trigger_name timing event1 ON table_name [FOR EACH ROW] DECLARE BEGIN --触发器代码 END; -------------------------------------- tname:表示触发器名字 timing:表示触发时间 after before event1:表示触发事件 insert,update,delete table_name:表示针对的表 for each row:(默认是语句级)行级触发器(当一条SQL语句影响多行时,多行同时出发 触发器),DML语句处理每条记录都会执行触发器;否则是一个语句级的触发器,每个DML语句触发一次 ------------------ 功能 说明 举例 触发时间 触发器体执行的时机 before,after 触发事件 哪类具体的数据操纵语句 insert,update,delete new old 查询所有触发器:select trigger_name from all_triggers where table_name='XXX'; ------------------------------------------------------------------------ */