当前位置:数据分析 > Oracle存储过程基本语法

Oracle存储过程基本语法

  • 发布:2023-10-01 15:00

迟到者追赶并不容易

对于技术工作尤其如此。这都是一个有个人输入的过程。尤其是开发仍然是一个技术壁垒较高的行业。

创建基本存储过程

1 创建或替换过程 MyProName IS
2 开始
3 空;
4结束;

第1行:CREATE OR REPLACE PROCEDURE是一条SQL语句,通知Oracle数据库创建一个称为骨架的存储过程,如果存在则覆盖它;

第 2 行:IS 关键字表示后面将是 PL/SQL 主体。

第 3 行:BEGIN 关键字指示 PL/SQL 主体的开始。

第 4 行:NULL PL/SQL 语句表示不执行任何操作。这句话不能删除,因为PL/SQL体中至少需要有一句话;

第 5 行:END 关键字表示 PL/SQL 主体的结束

创建带参数的存储过程

现在我想向存储过程添加参数。如何定义变量?如下

1 创建或替换过程 MyPro(param1 in varchar2,param2 out varchar2) as
2 v_cnt 号; --定义变量1
3 表名1 varchar2(80); --定义变量2
4 sqlTxt varchar2(2000); --定义变量2
5 开始
6 --处理逻辑
7 空;
8结束;

(1)存储过程参数没有取值范围,in表示传入,out表示输出;该类型可以使用Oracle中任何合法的类型。

(2) 变量有取值范围,后跟分号

返回顶部

创建包含事务的存储过程

创建或替换过程 MyPro(param1 in varchar2,param2 out varchar2) asv_cnt number; --定义变量1表名1 varchar2(80); --定义变量2sqlTxt varchar2(2000); --定义变量2
BEGIN--处理逻辑 NULL;commit;--提交事务
Exception当其他时候Dbms_output.Put_line(sqlerrm);--打印输出错误 Rollback;--回滚事务
结束;

提交交易,出现异常则回滚交易;

返回顶部

使用光标

光标遍历

创建或替换过程 MyPro(param1 in varchar2, param2 out varchar2) asv_cnt number; --定义变量1表名1 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; --提交交易
异常时其他人则Dbms_output.Put_line(sqlerrm); --打印输出错误回滚; --回滚事务
结束;

返回光标

创建或替换程序测试(
解析 varchar2,p_cur 输出 sys_refcursor) 作为
开始
打开 p_cur forselect * from tableName
资源:='';
结束;

返回顶部

其他提示

分支条件判断

--分支判断 if tablename1 <> '' then--处理逻辑 null;else--处理逻辑 null;end if;

动态sql

 --拼接动态sqlsqltxt := 'update ' ||表名1 || ' tset t.partid=(从 i_partlist t3 中选择 t3.f_id,其中 t3.part_no=t.part_noand nvl(t3.part_techstate,'' '' )=nvl(t.part_techstate,'' ''))where 不存在( select t2.f_id from i_Partlist t2 where t2.f_id=t.partid)';--执行动态sql执行立即sqlTxt;

为变量赋值

(1) 使用 select XX into xx 给变量赋值

 从 A t 中选择 count(1) 到 v_count,其中 t.A='aaa';

(2) 直接分配

V_TEST := 123;

while循环

 WHILE V_TEST=1 LOOPBEGINXXXXEND;END LOOP;

判断是否有

在判断语句之前,最好先用count(*)函数判断操作记录是否存在

 --判断是否存在,v_count是一个定义的数值变量 select count(1)into v_countfrom A twhere t.A='aaa';if v_count = 0 thenelseend if;

相关文章