--在hibinate 中如何传递参数给 存储过程
---新建一个存储要存储集合id 的临时表
-- Create table
create table MBRC_OLTPORTID
(
ID NUMBER(18) not null
)
tablespace NG_DATA
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
----存储过程接收list参数
----定义一个存储Long类型的数据库对象
CREATE TYPE AOBJECT AS OBJECT(
a NUMBER(18)
)
------定义一个List数据库对象
CREATE TYPE ALIST AS VARRAY(100) OF AOBJECT;
---------存储过程(读取list 存放在新建的临时表里)
create or replace procedure mbrc_uptowncalculaterate(p1 in ALIST ,p2 out varchar2) as
begin
TRUNCATE TABLE MBRC_OLTPORTID;
for i in 1..p1.count loop
insert into MBRC_OLTPORTID values(p1(i).a);
end loop;
p2:='null';
end;
----JAVA CODE
@Override
public Boolean calculateUptownRate(final ArrayList<Long> oltPorIds) {
final String sql = "{CALL mbrc_uptowncalculaterate(?,?)}";
return this.getHibernateTemplate().execute(
new HibernateCallback<Boolean>() {
@SuppressWarnings("deprecation")
public Boolean doInHibernate(Session session)
throws HibernateException, SQLException {
Connection conn = null;
CallableStatement statement = null;
try {//获取数据库连接
conn = SessionFactoryUtils
.getDataSource(getSessionFactory()).getConnection();
ARRAY aArray = getArray(conn, "AOBJECT", "ALIST", oltPorIds);
statement = session.connection().prepareCall(sql);
statement.setArray(1, aArray);
statement.registerOutParameter(2, Types.VARCHAR);
statement.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
statement.close();
statement = null;
}
return statement.getString(2).equals("null");
}
});
}
/**
private static ARRAY getArray(Connection con, String OracleObj,
String Oraclelist, ArrayList<Long> objlist) throws Exception {
ARRAY list = null;
if (objlist != null && objlist.size() > 0) {
StructDescriptor structdesc = new StructDescriptor(OracleObj, con);
STRUCT[] structs = new STRUCT[objlist.size()];
Object[] result = new Object[0];
for (int i = 0; i < objlist.size(); i++) {
result = new Object[1];// 数组大小应和你定义的数据库对象(AOBJECT)的属性的个数
result[0] = new Long(objlist.get(i).longValue()); // 将list中元素的数据传入result数组
structs[i] = new STRUCT(structdesc, con, result);
}
ArrayDescriptor desc = ArrayDescriptor.createDescriptor(Oraclelist,
con);
list = new ARRAY(desc, con, structs);
} // if
return list;
}
---merge into 9i新特性 更新表,以及刷存量数据是效率最高
MERGE INTO table_name alias1
USING (table|view|sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
UPDATE table_name
SET col1 = col_val1,
col2 = col_val2
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);
------查询当天是一个月中的第几周 select to_char(sysdate + 1, 'iw') + 1 - to_char(last_day(add_months(sysdate, -1)) + 2, 'iw') from dual;
------oracle job 之submmit 用法参数
使用Submit()过程,工作被正常地计划好。 这个过程有五个参数:job、what、next_date、interval与no_parse。 PROCEDURE Submit ( job OUT binary_ineger, What IN varchar2, next_date IN date, interval IN varchar2, no_parse IN booean:=FALSE) job参数是由Submit()过程返回的binary_ineger。这个值用来唯一标识一个工作。 what参数是将被执行的PL/SQL代码块。 next_date参数指识何时将运行这个工作。 interval参数何时这个工作将被重执行。 no_parse参数指示此工作在提交时或执行时是否应进行语法分析——TRUE 指示此PL/SQL代码在它第一次执行时应进行语法分析, 而FALSE指示本PL/SQL代码应立即进行语法分析。
NLS_INITCAP(x[,y])
【功能】返回字符串并将字符串的第一个字母变为大写,其它字母小写;
【参数】x字符型表达式
【参数】Nls_param可选,
查询数据级的NLS设置:select * from nls_database_parameters;
例如:
指定排序的方式(nls_sort=) 。
nls_sort=SCHINESE_RADICAL_M(部首、笔画)
nls_sort=SCHINESE_STROKE_M(笔画、部首SCHINESE_PINYIN_M(拼音))
【返回】字符型
【示例】
select nls_initcap('ab cde') "test",
nls_initcap('a c b d e','nls_sort= SCHINESE_PINYIN_M') "test1" from dual;
返回:Ab Cde, A C B D E
select nls_initcap('ab cde') "test",
nls_initcap('a c b d e','NLS_LANGUAGE=AMERICAN') "test1" from dual;