用html5做的音乐网站,帝国cms 网站地图 自定义,西安建设工程交易网站,体育论坛网站建设创建基本的存储过程 1 CREATE OR REPLACE PROCEDURE MyProName IS
2 BEGIN
3 NULL;
4 END; 行1:CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2:IS关键词表明后面将跟随一个PL/SQL体。 行3:BEGIN关键词表…创建基本的存储过程 1 CREATE OR REPLACE PROCEDURE MyProName IS
2 BEGIN
3 NULL;
4 END; 行1:CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2:IS关键词表明后面将跟随一个PL/SQL体。 行3:BEGIN关键词表明PL/SQL体的开始。 行4:NULL PL/SQL语句表明什么事都不做这句不能删去因为PL/SQL体中至少需要有一句; 行5:END关键词表明PL/SQL体的结束 创建带参数存储过程 现在想给存储过程加上参数定义变量怎么处理呢如下 1 CREATE OR REPLACE PROCEDURE MyPro(param1 in varchar2,param2 out varchar2) as
2 v_cnt number; --定义变量1
3 tablename1 varchar2(80); --定义变量2
4 sqlTxt varchar2(2000); --定义变量2
5 BEGIN
6 --处理逻辑
7 NULL;
8 END; (1)存储过程参数不带取值范围in表示传入out表示输出类型可以使用任意Oracle中的合法类型。 (2) 变量带取值范围后面接分号 创建带事务的存储过程 CREATE OR REPLACE PROCEDURE MyPro(param1 in varchar2,param2 out varchar2) asv_cnt number; --定义变量1tablename1 varchar2(80); --定义变量2sqlTxt varchar2(2000); --定义变量2
BEGIN--处理逻辑NULL;commit;--提交事务
ExceptionWhen others thenDbms_output.Put_line(sqlerrm);--打印输出错误Rollback;--回滚事务
END; 提交事务存在异常则回滚事务 使用游标 游标遍历 CREATE OR REPLACE PROCEDURE MyPro(param1 in varchar2, param2 out varchar2) asv_cnt number; --定义变量1tablename1 varchar2(80); --定义变量2sqlTxt varchar2(2000); --定义变量2
BEGIN--定义游标cursor c_tab_temp1 isselect t.modelnumber, t.tablename from d_modelmap t;c_bom_row1 c_tab_temp1%rowtype;--处理逻辑--循环游标for c_bom_row1 in c_tab_temp1 looptablename1 : c_bom_row1.tablename; --取游标中的值END LOOP;commit; --提交事务
ExceptionWhen others thenDbms_output.Put_line(sqlerrm); --打印输出错误Rollback; --回滚事务
END; 返回游标 create or replace procedure test(
res out varchar2,
p_cur out sys_refcursor) as
Begin
open p_cur forselect * from tableName
res:;
end; 其他使用技巧 分支条件判断 --分支判断if tablename1 then--处理逻辑null;else--处理逻辑null;end if; 动态sql --拼接动态sqlsqltxt : update || tablename1 || tset t.partid(select t3.f_id from i_partlist t3 where t3.part_not.part_noand nvl(t3.part_techstate, )nvl(t.part_techstate, ))where not exists(select t2.f_id from i_Partlist t2 where t2.f_idt.partid);--执行动态sqlexecute immediate sqlTxt; 给变量赋值 (1)用select XX into xx给变量赋值 select count(1) into v_count from A t where t.Aaaa; (2)直接赋值 V_TEST : 123; while 循环 WHILE V_TEST1 LOOPBEGINXXXXEND;END LOOP; 判断是否存在 在判断语句前最好先用count*函数判断是否存在该条操作记录 --判断是否存在v_count是定义的数值变量select count(1)into v_countfrom A twhere t.Aaaa;if v_count 0 thenelseend if; 转载于:https://www.cnblogs.com/yx007/p/7340221.html