工作可能涉及到编写问题汇总(存储过程-COBOL)
1.程序注意事项
1.支持判断为''、' '、null 的场景
if(trim(i) is null)
2.主函数命名修改为:PROC_MAIN
3.存储过程命名需要确认(_D or _B...)
4.存储过程中有查询,确定查询条件是否是根据主键查询,
主键查询时,需要添加:FETCH FIRST 1 ROW ONLY;
5. 游标中 存在 FOR UPDATE 结尾, COMMIT 需要放在循环体外,否则程序将会中断报错;
PBCO.PCKG_PBCO_B_PUBMODUL.COMMIT_PROCESS;
6. 定义数组类型:
TYPE AA IS TABLE OF VARCHAR2(50) INDEX BY PLS_INTEGER;
BB AA;
BB(1) := '下标1数据';
BB(2) := '下标2数据';
循环遍历数组简单用法:
FOR I IN 1 .. BB.COUNT LOOP
IF 条件 THEN
ELSE
END IF;
END LOOP;
2. SQLCODE 修改
SQLCODE 不能在存储过程中使用
(1)SQLCODE = NOT-FOUND 表示数据找不到,在存储过程中该场景需要写在 EXCEPTION 中
如:
WHEN NO_DATA_FOUND THEN
END_FLAG := 'T';
游标中数据没有时写法:
IF CUR_RTHFNJNL%NOTFOUND THEN
END_OF_RTHFNJNL := 'T';
(2)SQLCODE NOT = 0 表示 查询失败(SQL-ERROR 程序中断),此时写在主程序下
(3)SQLCODE = 0 表示查询成功,该场景写在
WHEN OTHERS THEN
PBCO.PCKG_PBCO__ERROR.RAISE_INFO('PROC_100_FETCH_RTHFNJNL_TABLE');
(4)存储过程中涉及到的 DML 语句 FETCH FIRST 1 ROW ONLY:
换行展示
(5)打印日志语句 DISPLAY 对应:
PBCO.PCKG_PBCO_B_PUBMODUL.WRITE_LOG('G_RTBRSSDD.AMT' ||· G_RTBRSSDD.AMT);
3. 字符串截位
字符串截位:
SUBSTR(BK1,29,1) <> '1' 对应存储过程中可以改为:
SUBSTR(RPAD(NVL(BK1,''),30,''),29,1) <> '1';
1.NVL(BK1,'') 判断 BK1 是否为空 ,如果为空返回'';
2.NVL(BK1,'') 如果 BK1 不为空,进行后续处理;
3.RPAD(NVL(BK1,''),30,'') 从右边对BK1进行填充,填充长度为30,填充字符串为 ''
4.SUBSTR(RPAD(NVL(BK1,''),30,''),29,1):填充之后,对填充后的BK1 进行截位从
注:
LPAD 这一函数,LPAD 函数是从左边对字符串使用指定的字符进行填充,
L是left(左边)的简写,PAD是padded(填充)的简写,所以LPAD就是从左边填充的意思。语法格式:
LPAD(string, padded_length, [pad_string])
eg:
select LPAD('123', 4, '0') from dual;
结果为:0123
select LPAD('123', 2) from dual;
结果为:12
select LPAD('123', 5) from dual;
结果为:' 123'
RPAD 函数从右边对字符串使用指定的字符进行填充,语法格式:
RPAD(string,padded_length,[pad_string])
eg:
select RPAD('123', 5, '0') from dual;
结果为:12300
select RPAD('123', 2, '0') from dual;
结果为:12
select RPAD('123', 5) from dual;
结果为:'123 '
COBOL程序代码:
MOVE A(1:4) TO AA(1:4);
MOVE '-' TO AA(5:1);
MOVE B(5:2) TO AA(6:2);
MOVE '-' TO AA(8:1);
MOVE C(7:2) TO AA(9:2);
对应存储过程写法:
G_RTHPAMAC.AA = SUBSTR(G_FILE_BUFF_RFPAMAC('A'),1,4) || '-' ||
SUBSTR(G_FILE_BUFF_RFPAMAC('B'),5,2) || '-' ||
SUBSTR(G_FILE_BUFF_RFPAMAC('C'),7,2);
4. substr 函数格式
1、substr函数格式 (俗称:字符截取函数)
格式1: substr(string, int a, int b);
格式2:substr(string, int a) ;
解析:
格式1:
1、string 需要截取的字符串
2、a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)
3、b 要截取的字符串的长度
格式2:
1、string 需要截取的字符串
2、a 可以理解为从第a个字符开始截取后面所有的字符串。
1、select substr('HelloWorld',0,3) value from dual;
2、select substr('HelloWorld',1,3) value from dual;
3、select substr('HelloWorld',2,3) value from dual;
4、select substr('HelloWorld',0,100) value from dual;
5、select substr('HelloWorld',5,3) value from dual;
6、select substr('Hello World',5,3) value from dual;
7、select substr('HelloWorld',-1,3) value from dual;
8、select substr('HelloWorld',-2,3) value from dual;
9、select substr('HelloWorld',-3,3) value from dual;
10、select substr('HelloWorld',-4,3) value from dual;