码迷,mamicode.com
首页 > 数据库 > 详细

Oracle存储过程随记

时间:2021-01-18 10:35:03      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:进入   arc   failed   otf   row   导入   case when   except   fail   

NO.1

2个方法不同
SUBSTR(bc_ymd, 1, 6) 与 SUBSTR(bc_ymd,6)

NO.2 游标的写法

? CURSOR CR_TEST IS
? SELECT
? ....
? FROM
? (
? ); --最后结尾要要有分号
?

NO.3 CASE WHEN 在查询条件中的使用

? 例如:

				...................
				...................	
	            LEFT JOIN T_0001 B
                ON A.S_CD = B.SN_CD
                AND B.DEL_FLG = ‘0‘ 
                AND B.SN_CD= ‘1‘ 
                AND ( 
					CASE 
					WHEN A.TYPE = ‘4‘ 
						AND B.TYPE IN (‘4‘, ‘A‘) 
						THEN 1
                    WHEN A.TYPE = ‘B‘ 
						AND B.TYPE IN (‘1‘, ‘2‘, ‘3‘, ‘B‘) 
						THEN 1 
                    WHEN A.TYPE NOT IN (‘4‘, ‘B‘) 
						THEN 0 
                    END
                ) = 1

?

左列接条件和 最后的where 条件是有区别的
最后的where条件相当于是2个表内连接,所以要注意,限定条件是写在左连接里面还是where条件里面

NO.4

函数都是要写RETURN!!!不然会进入函数中写的 EXCEPTION

FUNCTION F_OV007(ic_job_id IN CHAR,
iv_prgid IN VARCHAR2,
ic_gyom_kbn IN CHAR,
ic_user_id IN CHAR,
ic_ob_kbn IN CHAR) RETURN NUMBER
IS
ln_ret NUMBER(02);
EX_ERROR_OTHERS EXCEPTION;
BEGIN

...................
...................

RETURN PK_101.gn#OK;  --!!!返回值

EXCEPTION
WHEN EX_ERROR_OTHERS THEN
ln_ret := F_ERROR_PROC;
RETURN PK_101.gn#NG;

WHEN OTHERS THEN
	ln_ret := F_ERROR_PROC;
	RETURN PK_101.gn#NG;

END F_OV007;

NO.5

一些关键词的用法

【ISOPEN】 确认游标的状态
例如:
WHEN EX_ERROR_OTHERS THEN
IF CR_T_G01_V01%ISOPEN THEN --发生异常是确认游标是否打开,注意关闭
CLOSE CR_T_G01_V01;
END IF;

【ROLLBACK】 事务提回滚
【COMMIT】 事务提交
【RAISE】 抛出异常
【%NOTFOUND】 is the logical opposite of %FOUND. %NOTFOUND yields FALSE if the last fetch returned a row, or TRUE if the last fetch failed to return a row
例如:
......
RAISE EX_ERROR_OTHERS;
......

EXCEPTION
WHEN EX_ERROR_OTHERS THEN
ln_ret := F_ERROR_PROC;
RETURN PK_101.gn#NG;

WHEN OTHERS THEN
	ln_ret := F_ERROR_PROC;
	RETURN PK_O.gn#NG;

NO.6遍历游标

OPEN  CR_T_G01_V01;
FETCH CR_T_G01_V01  INTO  ir_T_G01_V01;
WHILE CR_T_G01_V01%FOUND LOOP
    ln_ret := F_INSERT_T_V01(ir_T_G01_V01);  --将读到的数据ir_T_G01_V01 传递给其他方法F_INSERT_T_V01
    IF  ln_ret = 0 THEN
        RAISE EX_ERROR_OTHERS;
    END IF;
    --读取下一条
    FETCH CR_T_G01_V01  INTO  ir_T_G01_V01;
end loop;
bn_cnt_input_t_g01 := CR_T_G01_V01%ROWCOUNT;        --获取游标的记录条数
close CR_T_G01_V01;

NO.7

头部和body 写到一个SQL文件

CREATE OR REPLACE PACKAGE PK_O1
IS
..............
..............
END PK_O1;
/
CREATE OR REPLACE PACKAGE BODY PK_O1
IS
..............
..............
END PK_O1;
/

NO.8命令行快速导入存储过程sql

打开CMD,输入格式如下

sqlplus 账号/密码@数据库名 @PK_001.sql

sqlplus root/root@databasename @PK_001.sql

Oracle存储过程随记

标签:进入   arc   failed   otf   row   导入   case when   except   fail   

原文地址:https://www.cnblogs.com/vaen/p/14285310.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!