您现在的位置是:首页 > 众测

存储过程如何调整(如何通过hibernate调用存储过程)

vcbgfh8RQW 2024-04-15

一、如何做好合同管理工作

目前由于合同管理本身涉及程序多、企业类型庞大等原因,在实际执行中会面临以下问题:信息不顺畅、整理效率低、流程执行慢、管理工作大、法律风险高、事后查询难。

OA系统针对企业合同管理的困境直击要害,构建了以合同管理为主线的“全生命周期的合同管理体系”,合同信息完整记录,让审批有据可循。

合同管理功能展示:

1、合同管理——流程管理便捷规范

(1)合同起草:将合同流程电子化,建单后直接生成合同台账,借阅审批时间。

(2)合同台账:台账内清晰显示合同类型、金额、时间等信息,合同状态一目了然。

(3)收款合同:点击收款合同台账,可以在合同卡片上直接查看合同基本信息、收款信息、开票信息。

(4)付款合同:点击付款合同台账,合同基本信息、付款信息、开篇信息清晰记录在内。

2、合同履约——信息实时更新

(1)开票申请:审批通过,自动生成“开票记录”,合同卡片中的“开票信息”(“已开票金额”、“未开票金额”和“已开票比例”)同步更新。

(提交申请——出纳开票——审批结束——形成开票记录)

(2)收款登记:收款无需审批,由财务直接登记,系统自动生成“收款记录”(“应收金额”、“已收金额”、“未收金额”和“已收比例”)

(3)付款申请:审批通过后,系统自动生成合同付款记录(应付金额”、“已付金额”、“未付金额”和“已付比例”)

(4)合同变更:合同变更只允许变更付款条件以及合同金额,需审批。

审批同意后:

1.形成变更记录;

2.更新合同卡片中的付款条件、付款金额以及对应的收款信息、付款信息和开票信息。

(5)合同终止:合同管理员操作,需审批,审批同意后,将合同的装填进行了变更。置为“异常终止”状态下的合同,无法开票、无法收款、无法付款、无法变更和借阅。

(6)合同借阅:此借阅为纯粹的记录,不做任何自动共享功能,借阅类型分为原件、复印件和电子版。

通过OA办公系统业务建模引擎实现“合同全生命周期管理”:高效管理,避免繁琐手工操作,让审批便捷、规范;减少坏账,避免因为信息不畅通导致的坏账和亏损;技术支持,灵活定义报表,协助管理人员轻松应对。

二、如何通过hibernate调用存储过程

用hibernate操作数据库可以通过获取的session值调用connection()方法获取connection从而调用存储过程

java调用存储过程什么是存储过程?存储过程是指保存在数据库并在数据库端执行的程序存储过程是为嵌入式SQL所设计

如何调用存储过程?

try{ int age=; String poetName=&#;dylan thomas&#;; CallableStatement proc= connection prepareCall(&#;{ call set_death_age(??)}&#;); proc setString( poetName); proc setInt( age); cs execute();}catch(SQLException e){//&#;}

传给prepareCall方法的字串是存储过程调用的书写规范它指定了存储过程的名称?代表了你需要指定的参数

存储过程可以有返回值所以CallableStatement类有类似getResultSet这样的方法来获取返回值当存储过程返回一个值时你必须使用registerOutParameter方法告诉JDBC驱动器该值的SQL类型是什么你也必须调整存储过程调用来指示该过程返回一个值

connection setAutoCommit(false); CallableStatement proc= connection prepareCall(&#;{?= call snuffed_it_when(?)}&#;); proc registerOutParameter( Types INTEGER); proc setString( poetName); cs execute(); int age= proc getInt();

复杂的返回值 static void sendEarlyDeaths(PrintWriter out){ Connection con= null; CallableStatement toesUp= null; try{ con= ConnectionPool getConnection();// PostgreSQL needs a transaction to do this&#; con setAutoCommit(false);// Setup the call CallableStatement toesUp= connection prepareCall(&#;{?= call list_early_deaths()}&#;); toesUp registerOutParameter( Types OTHER); toesUp execute(); ResultSet rs=(ResultSet) toesUp getObject(); while(rs next()){ String name= rs getString(); int age= rs getInt(); out println(name+&#; was&#;+ age+&#; years old&#;);} rs close();} catch(SQLException e){// We should protect these calls toesUp close(); con close();}}

lishixinzhi/Article/program/Java/ky/201405/30833

三、气象数据缺失如何采用季节性调整+线性插值

在我做的大气污染报表系统中,由于原始数据缺失,经常出现一些负数或者0的大气浓度,导致最后生成的曲线很丑,会画到水平轴以下。将这些错误的数据当错缺失数据处理,需要采取一定的手段填充。缺失的数据采取插值法填充,这一点早就确定下来,但在如何实现上却困扰很久。

将原始问题简化一下。比如有这样一组数据。

ID so co1

1 0.1 0.1

2 0 0.2

3 0.2 0

4 0 0

5 0 0.4

6 0.1 0.5

插值法计算方法如下:(也可以不使用这两个步骤,只要最后的结果一致就行)

步骤一:计算缺失值上下的已知值间的斜率:

k=(b2- b1)/(n+ 1) n为缺失数据的个数

步骤二:计算对应的缺失值

a(i)= b1+ k* i

经过处理后,得到的数据是这样的:

1 0.10 0.10

2 0.15 0.20

3 0.20 0.27

4 0.17 0.33

5 0.13 0.40

6 0.10 0.50

我最初的想法是:在sql语句中用for循环来做。逐条地检查每个数值,如果是0,那么获取它的前一个记录的值b1,然后再继续向后遍历,获取后面一个非0的值b2,计算这两个非0数据之间的距离n,之后再用插值法将缺失的数据计算出来,并update到b1和b2之间的每一个值。按照这个思路,很麻烦,比如遍历过程中如何获取前一个数值?出现0的时候,如何记录出现多少个0?for循环经过后,再如何update之前的数值?被这些问题困扰很久!

在论坛上发帖解决,解决的办法很受启发。

1.创建一个函数

ALTER FUNCTION FUN_CO(@ID INT) RETURNS DECIMAL(18, 3) AS BEGIN DECLARE@NUM1 NUMERIC(19,2),@ID1 INT,@NUM2 NUMERIC(19,2),@ID2 INT SELECT TOP 1@ID1=ID,@NUM1=CO FROM APRECORD WHERE ID<=@ID AND CO<>0 ORDER BY ID DESC SELECT TOP 1@ID2=ID,@NUM2=CO FROM APRECORD WHERE ID>=@ID AND CO<>0 ORDER BY ID ASC IF@ID2<>@ID1 RETURN@NUM1+(((@NUM2-@NUM1)/(@ID2-@ID1))*(@ID-@ID1)) RETURN@NUM1 END

2.更新数据库

UPDATE APRECORD SET CO=DBO.FUN_CO(ID) WHERE DAYTIME>=@BDT AND DAYTIME<@EDT

在这个解决方案中,首先查找到缺失的数据,也就是值为0的数据,然后向前查找非0数据@NUM1,以及它的编号@ID1,向后查找非0的数据@NUM2.以及编号@ID2。也就是步骤一。然后用公式计算出填充的数据。将上述过程保存在一个函数中,在存储过程中调用。甚至不用for循环之类。

---------------------------------------------------------------------------------------

启示:

1.明确问题,记录下来,逐步地寻求解决方案。而不是全凭脑袋空想。脑袋很容易遗漏一些因素,而且大多数时候没什么条理,跳跃性太强。解决问题需要方法学。

2.在sql下思考。用for循环什么的,还处于静态语言的思维模式之下。sql是一门艺术!思维转换,才能发挥出语言的最大功能。当然这需要长时间的锻炼。

文章版权声明:除非注明,否则均为典胜网原创文章,转载或复制请以超链接形式并注明出处。