Oracle存储过程初学

前端之家收集整理的这篇文章主要介绍了Oracle存储过程初学前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

<div id="cnblogs_post_body">
<div class="Section0">

存储过程

 IS

 BEGIN

  NULL;

 END;

sql语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它;

sql体。

sql体的开始。

sql语句表明什么事都不做,这句不能删去,因为PL/sql体中至少需要有一句;

sql体的结束

存储过程创建语法:

打印信息’);

打印信息’);

输出

函数判断是否存在该条操作记录

代码中抛异常用 raise+异常名

错误信息变量vs_ym_beg  CHAR(6);      --vs_ym_end  CHAR(6);      --vs_ym_sn_beg CHAR(6);     --vs_ym_sn_end CHAR(6);     ----定义游标 CURSOR cur_1 IS   SELECT 。。。   FROM 。。。     WHERE 。。。   GROUP BY 。。。; BEGIN --用输入参数给变量赋初值,用到了

函数。 vs_ym_beg := SUBSTR(is_ym,1,6); vs_ym_end := SUBSTR(is_ym,7,6); vs_ym_sn_beg := TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_beg,'yyyymm'), -12),'yyyymm'); vs_ym_sn_end := TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_end,'yyyymm'); 

删除表中特定条件的数据。 

方法打印出影响的记录行数,其中用到一个系统变量sql%rowcount 

 INSERT INTO表名(area_code,ym,CMCODE,rmb_amt,usd_amt) SELECT area_code,is_ym,SUM(rmb_amt)/10000,SUM(usd_amt)/10000 FROM BGD_AREA_CM_M_BASE_T   WHERE ym >= vs_ym_beg   AND ym <= vs_ym_end GROUP BY area_code,CMCODE; DBMS_OUTPUT.put_line('ins--遍历游标处理后更新到表。遍历游标有几种方法,用。FOR rec IN cur_1 LOOP   UPDATE 表名  SET rmb_amt_sn = rec.rmb_amt_sn,usd_amt_sn = rec.usd_amt_sn    WHERE area_code = rec.area_code    AND CMCODE = rec.CMCODE    AND ym = is_ym; END LOOP; COMMIT; --错误处理部分。错误。sqlERRM错误的详细信息。 EXCEPTION    WHEN OTHERS THEN       vs_msg := 'ERROR IN xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(sqlERRM,500);   ROLLBACK;    --把当前错误记录进日志表。    INSERT INTO LOG_INFO(proc_name,error_info,op_date)    VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE);    COMMIT;    RETURN; END;

 

0 then 

 

 

 

自定义的数组类型,定义方式见标题

 

用户可以使用

自带的数组类型 

自定义的数组类型 ( 自定义数据类型时,建议通过创建

 Oracle 查询结果。其相关方法属性也很多,现仅就常用的用法做一二介绍: 

 

该游标是

方法来打开和赋值 

exit when cursor%NOTFOUND;              --SYS_REFCURSOR 属性:

用法做一个应用: 

生成绩表

自动计算出每位学生的总成绩和平均成绩,同时,如果学生在课外课程中获得的评价为

调用名为获取学生课外评分信息 

>  average := total / 5; 

评论信息的存储过程 

 

=====================================================================================================下面是在plsql调用输出参数的存储过程:

第一种情况是返回的游标是某个具体的表或视图的数据,如: sql-Code:
*

其中USERS就是数据库中一个表。在调用的时候只要声明一个该表的ROWTYPE类型就可以了:

sql-Code:

%%
第二种情况,我们返回的不是表的所有的列,或许只是其中一列或两列,如: sql-Code:
这里我们只返回了USERS表的ID,NAME这两个列,那么调用的时候也必须做相应的修改sql-Code:
TMPCURSOR ID,NAME USERS ROWNUM VARCURSOR VARCURSOR LOOP;

猜你在找的Oracle相关文章