当前位置:首页 > 开发 > 数据库 > 正文

Oracle常用方法搜集

发表于: 2015-03-25   作者:补耍狠   来源:转载   浏览:
摘要: 1、查看Oracle版本 SELECT * FROM V$VERSION; SELECT * FROM v$instance; 2、查看数据库中的JOB SELECT * FROM user_jobs; 3、ORA-01810: format code appears twice 使用函数TO_TIMESTAMP('2014-10-28 11:21:19', 'yyyy
1、查看Oracle版本
SELECT * FROM V$VERSION;
SELECT * FROM v$instance;
2、查看数据库中的JOB
SELECT * FROM user_jobs;
3、ORA-01810: format code appears twice
使用函数TO_TIMESTAMP('2014-10-28 11:21:19', 'yyyy-MM-dd HH:mm:ss')时报的错误,这个是因为Oracle不区分大小写,format中使用的Mm重复了,所以报错,改正:TO_TIMESTAMP('2014-10-28 11:21:19', 'yyyy-MM-dd HH:mi:ss')
4、自定义类型
CREATE OR replace TYPE obj_table AS object
(tmpId VARCHAR(10),info VARCHAR(10),dt timestamp)
-- 自定义表类型,包含多个参数时,需要宁外定义一个object类型
CREATE OR replace TYPE t_table AS TABLE OF obj_table;
--创建一个方法,返回表类型(管道化表函数方法,这种方式最后的return为空)
create or replace function f_pipe(s number)
return t_table pipelined
as
    v_obj_table obj_table;   
begin    
for i in 1..s loop 
    v_obj_table :=  obj_table(i,to_char(i*i));
    pipe   row(v_obj_table);   
end loop;
return;
end f_pipe;
-- 普通创建方法
create or replace function f_normal(s number)
return t_table
as
    rs t_table:= t_table();
begin
    for i in 1..s loop
        rs.extend;
        rs(rs.count) := obj_table(rs.count,'name'||to_char(rs.count));
        --rs(rs.count).name := rs(rs.count).name || 'xxxx';
    end loop;
return rs;
end f_normal;
-- 调用
select * from table(f_pipe(5));
5、Oracle自定义聚合函数
--定义函数 
CREATE OR REPLACE FUNCTION f_catstring (p_str VARCHAR2) 
   RETURN VARCHAR2 
   AGGREGATE USING t_stringconcat; 
--定义类型 
CREATE OR REPLACE TYPE t_stringconcat AS OBJECT ( 
   str      VARCHAR2 (1000), 
   oldstr   VARCHAR2 (1000), 
--初始化函数,必须要实现的方法,初始化上下文环境
   STATIC FUNCTION odciaggregateinitialize (sctx IN OUT t_stringconcat) 
      RETURN NUMBER, 
--迭代运算函数,必须实现的方法,第一个参数为聚合的上一个值,
--第二个参数为当前要处理的值,如果为空,则忽略该次迭代 
   MEMBER FUNCTION odciaggregateiterate ( 
      SELF    IN OUT   t_stringconcat, 
      VALUE   IN       VARCHAR2 
   ) 
      RETURN NUMBER, 
--聚合函数的最后一步,用于返回处理结果,必须实现的方法。第一个参数为上下文,
--第二个参数为返回值,可以是number和varchar2等类型,第三个参数是标志位
   MEMBER FUNCTION odciaggregateterminate ( 
      SELF          IN       t_stringconcat, 
      returnvalue   OUT      VARCHAR2, 
      flags         IN       NUMBER 
   ) 
      RETURN NUMBER, 
--合并上下文到一个上下文中,并行或串行有可能被执行,必须实现,但Oracle选择性执行
   MEMBER FUNCTION odciaggregatemerge ( 
      SELF   IN OUT   t_stringconcat, 
      ctx2   IN       t_stringconcat 
   ) 
      RETURN NUMBER 
); 
--定义body,实现Object type 
CREATE OR REPLACE TYPE BODY t_stringconcat 
IS 
   STATIC FUNCTION odciaggregateinitialize (sctx IN OUT t_stringconcat) 
      RETURN NUMBER 
   IS 
   BEGIN 
      --初始化 
      sctx := t_stringconcat(NULL, NULL); 
      RETURN odciconst.success; 
   END; 
   MEMBER FUNCTION odciaggregateiterate ( 
      SELF    IN OUT   t_stringconcat, 
      VALUE   IN       VARCHAR2 
   ) 
      RETURN NUMBER 
   IS 
   BEGIN 
      --解决拼接多个字段重复的问题 
      IF NOT SELF.oldstr IS NULL AND SELF.oldstr = VALUE 
      THEN 
         NULL; 
      ELSE 
         SELF.str := SELF.str || VALUE || ', '; 
      END IF; 
 
      SELF.oldstr := VALUE; 
      RETURN odciconst.success; 
   END; 
   MEMBER FUNCTION odciaggregateterminate ( 
      SELF          IN       t_stringconcat, 
      returnvalue   OUT      VARCHAR2, 
      flags         IN       NUMBER 
   ) 
      RETURN NUMBER 
   IS 
   BEGIN 
      returnvalue := SUBSTR (SELF.str, 1, LENGTH (SELF.str) - 2); 
      RETURN odciconst.success; 
   END; 
   MEMBER FUNCTION odciaggregatemerge ( 
      SELF   IN OUT   t_stringconcat, 
      ctx2   IN       t_stringconcat 
   ) 
      RETURN NUMBER 
   IS 
   BEGIN 
      NULL; 
      RETURN odciconst.success; 
   END; 
END; 
并行执行聚合函数:

与内置函数一样,自定义聚合函数也可以并行执行。并指执行时,首先是各个slave执行聚合运算,然后将结果进行合并,合并是通过ODCIAggregateMerge实现的。下图展示了这个过程

注意:我们可以将自定义聚合函数作为分析函数使用,但是为了提高分析函数的执行效率,我们可以对自定义聚合函数做一些处理,详细内容可以参考《Data Cartridge Developer's Guide 》

Oracle常用方法搜集

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
除了采用第三方的ANDROID X86模拟外,但是 X86和自带的有很大不同,至少不算太方便。 1)CPU的占用
1、在oracle中 null 缺省会认为是最大值 ,因此 select id,description from security_application w
续上篇:http://blog.csdn.net/bisal/article/details/38919181 3. AUTOTRACE开关 SQLPLUS中打开AUT
SQL的执行计划实际代表了目标SQL在Oracle数据库内部的具体执行步骤,作为调优,只有知道了优化器选
续上篇:http://blog.csdn.net/bisal/article/details/39225373 4. 10046事件 通过10046事件也可以
Oracle 数据库如何搜集指定SQL的执行计划和解决过程中的ORA-00904错误 (版权声明,本人原创或者翻
在日常开发过程中,构建自动化的部署,要求开发人员提供的数据库Sql能够多次重复的执行,这就要求对
1 eclipse 常用方法 1.0 eclipse智能感知设置 Windows->Preferences->Java->Editor->Co
Windows CE开发常见问题解答 1.怎样在一个控件获得焦点时打开软键盘? 比如一个EditBox获得焦点后,
SQL中的单记录函数 1.ASCII 返回与指定的字符对应的十进制数; SQL> select ascii('A') A,ascii('
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号