分享一下有关ORACLE解析机制的问题,这个问题也困扰了我很长时间,今天总算定位并跟踪到其根本原因,拿出来跟大家分享一下 1、自定义的参数名不能与数据库表字段名重名!!! 举例来说: 在一个储存过程中调用一个内部过程块或者函数,希望通过传入的参数在数据采集后,返回自己想要的一些数值。 (1)如果你设置参数名与用到的某张表的字段名相同,就有可能取不到你想要到值。 (2)而单将过程或者函数内的SQL脚本直接通过SQL文本执行没有问题。 (3)手工调试,发现传入的参数值也没问题,就是拿不到你想要的值! 原因:ORACLE 对过程与函数的解析与单独的SQL文本的解析机制不一样引起的 这一点大家一定要注意,从规范做起,可以更好的防止类似此种情况的发生 2、命名规则,以下是我个人的命名习惯: 表名: 见名知义,如果多个单词组成,单词之前用下划线 _ 隔开 表结构字段名: 见名知义,如果由多个单词组成,单词之间用下划线 _ 隔开,切忌不要与JAVA命名规范混淆 函数名加前缀 F_NAME,(大写) 存储过程名加前缀: P_NAME;(大写) TYPE名加前缀: TYP_NAME;(大写) SEQUENECE名加前缀: SEQ_表名(大写) 索引名: IDX_表名(或者表名缩写)_001 (大写) 全局参数变量加前缀: v_valueName; 自定义异常加前缀: e_exceptionName 局部变量: 用JAVA的命名规则(如果不知道,自己查书),这样做的好处是保证与表字段名不会重复 另外再提醒一点:我这段测试用例的结尾处需要注意: 如果用到实际的数据采购,可以用MAX(id)去替代,因为最大时间对应的ID是相对最大值,前提ID是一个代理主键,即流水号SEQ |
|
来自: yongcheng.min > 《数据库》