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