oracle日常 常用函数与脚本

--在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;

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

数据库对象事件与属性统计 | performance_schema全方位介绍

上一篇《事件统计 | performance_schema全方位介绍》详细介绍了performance_schema的事件统计表,但这些统计数据粒度太粗,仅仅按...

1724
来自专栏Java3y

JDBC【事务、元数据、改造JDBC工具类】

1.事务 一个SESSION所进行的所有更新操作要么一起成功,要么一起失败 举个例子:A向B转账,转账这个流程中如果出现问题,事务可以让数据恢复成原来一样【A账...

3408
来自专栏文渊之博

SQL中几个常用的排序函数

最近使用窗口函数的频率越来越高,这里打算简单介绍一下几个排序的函数,做一个引子希望以后这方面的问题能够更深入的理解,这里先简单介绍一下几个简单的排序函数及其相...

1805
来自专栏用户2442861的专栏

java数据库操作 (附带数据库连接池的代码)

本文来自:曹胜欢博客专栏。转载请注明出处:http://blog.csdn.net/csh624366188

582
来自专栏好好学java的技术栈

jdbc就是这么简单

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问...

643
来自专栏乐沙弥的世界

Oracle 阻塞(blocking blocked)

   阻塞是DBA经常碰到的情形,尤其是不良的应用程序设计的阻塞将导致性能严重下降直至数据库崩溃。对DBA而言,有必要知道如何定位到当前系统有哪些阻塞,到底谁是...

612
来自专栏抠抠空间

Django之ORM其他骚操作

Django ORM执行原生SQL # extra # 在QuerySet的基础上继续执行子语句 # extra(self, select=None, wher...

2685
来自专栏Jerry的SAP技术分享

ABAP OPEN SQL里OPEN CURSOR和SELECT的比较

After the OPEN CURSOR statement, the database cursor is positioned in front of t...

3569
来自专栏Code_iOS

数据结构:链表

工程代码 Github: Data_Structures_C_Implemention -- Link List

771
来自专栏好好学java的技术栈

jdbc就是这么简单

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问...

562

扫码关注云+社区