`

Oracle WMSYS Functions

 
阅读更多

Oracle WMSYS Functions
Version 11.2
 
 
GENERAL
Data Types CREATE OR REPLACE TYPE wm_period AS OBJECT (
validfrom TIMESTAMP WITH TIME ZONE,
validtill TIMESTAMP WITH TIME ZONE);
Security conn / as sysdba

ALTER USER wmsys ACCOUNT UNLOCK IDENTIFIED BY wmsys;
 
WM_CONCAT

Cross-tabulates a comma delimited list WM_CONCAT(p1 IN VARCHAR2) RETURN VARCHAR2
CREATE TABLE t (
col1 VARCHAR2(5),
col2 VARCHAR2(20));

INSERT INTO t VALUES (111, 'This');
INSERT INTO t VALUES (111, 'is');
INSERT INTO t VALUES (111, 'a');
INSERT INTO t VALUES (111, 'test');
INSERT INTO t VALUES (222, 'This is not');

SELECT * FROM t;

col concat format a40

SELECT col1, wmsys.wm_concat(col2) CONCAT
FROM t
GROUP BY col1;

SELECT col1, TRANSLATE(wmsys.wm_concat(col2), 'A,', 'A ') CONCAT
FROM t
GROUP BY col1;
 
WM_CONTAINS

Checks if the first period contains the second period WM_CONTAINS(p1 IN WM_PERIOD, p2 IN WM_PERIOD) RETURN INTEGER;
conn wmsys/wmsys

SELECT number_of_binds
FROM user_operators
WHERE owner = 'WMSYS'
AND operator_name = 'WM_CONTAINS';

set long 1000000

SELECT dbms_metadata.get_ddl('OPERATOR', 'WM_CONTAINS') FROM dual;

set serveroutput on

DECLARE
retval INTEGER;
p1b    DATE := TO_DATE('01-JAN-2009');
p1e    DATE := TO_DATE('05-JAN-2009');
p2b    DATE := TO_DATE('01-JAN-2009');
p2e    DATE := TO_DATE('03-JAN-2009');
BEGIN
SELECT WM_CONTAINS(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval);

p1b := TO_DATE('02-JAN-2009');
p1e := TO_DATE('06-JAN-2009');

SELECT WM_CONTAINS(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval); 
END;
/
 
WM_EQUALS

Checks if two periods are equal (that is, their start and end times are the same) WM_EQUALS(p1 IN WM_PERIOD, p2 IN WM_PERIOD) RETURN INTEGER;
conn wmsys/wmsys

SELECT number_of_binds
FROM user_operators
WHERE owner = 'WMSYS'
AND operator_name = 'WM_EQUALS';

set long 1000000

SELECT dbms_metadata.get_ddl('OPERATOR', 'WM_EQUALS') FROM dual;

set serveroutput on

DECLARE
retval INTEGER;
p1b    DATE := TO_DATE('01-JAN-2009');
p1e    DATE := TO_DATE('03-JAN-2009');
p2b    DATE := TO_DATE('01-JAN-2009');
p2e    DATE := TO_DATE('03-JAN-2009');
BEGIN
SELECT WM_EQUALS(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval);

p1b := TO_DATE('01-JAN-2009');
p1e := TO_DATE('04-JAN-2009');

SELECT WM_EQUALS(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval); 
END;
/
 
WM_GREATERTHAN

Checks if the start of the first period is greater than (that is, later than) the end of the second period WM_GREATERTHAN(p1 IN WM_PERIOD, p2 IN WM_PERIOD) RETURN INTEGER;
conn wmsys/wmsys

SELECT number_of_binds
FROM user_operators
WHERE owner = 'WMSYS'
AND operator_name = 'WM_GREATERTHAN';

set long 1000000

SELECT dbms_metadata.get_ddl('OPERATOR', 'WM_GREATERTHAN') FROM dual;

set serveroutput on

DECLARE
retval INTEGER;
p1b    DATE := TO_DATE('01-FEB-2009');
p1e    DATE := TO_DATE('03-FEB-2009');
p2b    DATE := TO_DATE('01-JAN-2009');
p2e    DATE := TO_DATE('31-JAN-2009');
BEGIN
SELECT WM_GREATERTHAN(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval);

p2b := TO_DATE('02-FEB-2009');
p2e := TO_DATE('31-DEC-2009');

SELECT WM_GREATERTHAN(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval); 
END;
/
 
WM_INTERSECTION

Returns the intersection of the two periods, that is, the time range common to both periods WM_INTERSECTION(p1 IN WM_PERIOD, p2 IN WM_PERIOD) RETURN WM_PERIOD;
conn wmsys/wmsys

SELECT number_of_binds
FROM user_operators
WHERE owner = 'WMSYS'
AND operator_name = 'WM_INTERSECTION';

set long 1000000

SELECT dbms_metadata.get_ddl('OPERATOR', 'WM_INTERSECTION') FROM dual;

set serveroutput on

DECLARE
retval WM_PERIOD;
p1b    DATE := TO_DATE('01-JAN-2009');
p1e    DATE := TO_DATE('10-JAN-2009');
p2b    DATE := TO_DATE('08-JAN-2009');
p2e    DATE := TO_DATE('12-JAN-2009');
BEGIN
SELECT WM_INTERSECTION(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval.validfrom);
dbms_output.put_line(retval.validtill);
END;
/
 
WM_LDIFF

Returns the difference between the two periods on the left (that is, earlier in time) WM_LDIFF(p1 IN WM_PERIOD, p2 IN WM_PERIOD) RETURN WM_PERIOD;
conn wmsys/wmsys

SELECT number_of_binds
FROM user_operators
WHERE owner = 'WMSYS'
AND operator_name = 'WM_LDIFF';

set long 1000000

SELECT dbms_metadata.get_ddl('OPERATOR', 'WM_LDIFF') FROM dual;

set serveroutput on

DECLARE
retval WM_PERIOD;
p1b    DATE := TO_DATE('01-NOV-2008');
p1e    DATE := TO_DATE('31-DEC-2008');
p2b    DATE := TO_DATE('29-NOV-2008');
p2e    DATE := TO_DATE('01-DEC-2008');
BEGIN
SELECT WM_LDIFF(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval.validfrom);
dbms_output.put_line(retval.validtill);
END;
/
 
WM_LESSTHAN
Checks if the end of the first period is less than (that is, earlier than) the start of the second period WM_LESSTHAN(p1 IN WM_PERIOD, p2 IN WM_PERIOD) RETURN INTEGER;
conn wmsys/wmsys

SELECT number_of_binds
FROM user_operators
WHERE owner = 'WMSYS'
AND operator_name = 'WM_LESSTHAN';

set long 1000000

SELECT dbms_metadata.get_ddl('OPERATOR', 'WM_LESSTHAN') FROM dual;

set serveroutput on

DECLARE
retval INTEGER;
p1b    DATE := TO_DATE('01-JAN-2009');
p1e    DATE := TO_DATE('02-JAN-2009');
p2b    DATE := TO_DATE('03-JAN-2009');
p2e    DATE := TO_DATE('16-JAN-2009');
BEGIN
SELECT WM_LESSTHAN(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval);

p1b := TO_DATE('04-JAN-2009');
p1e := TO_DATE('10-JAN-2009');

SELECT WM_LESSTHAN(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval); 
END;
/
 
WM_MEETS

Checks if the end of the first period is the start of the second period WM_MEETS(p1 IN WM_PERIOD, p2 IN WM_PERIOD) RETURN INTEGER;
conn wmsys/wmsys

SELECT number_of_binds
FROM user_operators
WHERE owner = 'WMSYS'
AND operator_name = 'WM_MEETS';

set long 1000000

SELECT dbms_metadata.get_ddl('OPERATOR', 'WM_OVERLAPS') FROM dual;

set serveroutput on

DECLARE
retval INTEGER;
p1b    DATE := TO_DATE('01-JAN-2009');
p1e    DATE := TO_DATE('03-JAN-2009');
p2b    DATE := TO_DATE('03-JAN-2009');
p2e    DATE := TO_DATE('06-JAN-2009');
BEGIN
SELECT WM_MEETS(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval);

p1b := TO_DATE('01-JAN-2009');
p1e := TO_DATE('04-JAN-2009');

SELECT WM_MEETS(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval); 
END;
/
 
WM_OVERLAPS

Checks if two periods overlap WM_OVERLAPS(p1 IN WM_PERIOD, p2 IN WM_PERIOD) RETURN NUMBER;
conn wmsys/wmsys

SELECT number_of_binds
FROM user_operators
WHERE owner = 'WMSYS'
AND operator_name = 'WM_OVERLAPS';

set long 1000000

SELECT dbms_metadata.get_ddl('OPERATOR', 'WM_OVERLAPS') FROM dual;

set serveroutput on

DECLARE
retval INTEGER;
p1b    DATE := TO_DATE('01-JAN-2009');
p1e    DATE := TO_DATE('31-JAN-2009');
p2b    DATE := TO_DATE('31-DEC-2008');
p2e    DATE := TO_DATE('02-JAN-2009');
BEGIN
SELECT WM_OVERLAPS(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval);

p1b := TO_DATE('03-JAN-2009');
p1e := TO_DATE('31-JAN-2009');

SELECT WM_OVERLAPS(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval); 
END;
/
 
WM_RDIFF

Returns the difference between the two periods on the right (that is, later in time) WM_RDIFF(p1 IN WM_PERIOD, p2 IN WM_PERIOD) RETURN WM_PERIOD;
conn wmsys/wmsys

SELECT number_of_binds
FROM user_operators
WHERE owner = 'WMSYS'
AND operator_name = 'WM_RDIFF';

set long 1000000

SELECT dbms_metadata.get_ddl('OPERATOR', 'WM_RDIFF') FROM dual;

set serveroutput on

DECLARE
retval WM_PERIOD;
p1b    DATE := TO_DATE('01-JAN-2009');
p1e    DATE := TO_DATE('31-DEC-2009');
p2b    DATE := TO_DATE('12-JAN-2008');
p2e    DATE := TO_DATE('16-JAN-2009');
BEGIN
SELECT WM_RDIFF(WM_PERIOD(p1b, p1e), WM_PERIOD(p2b, p2e))
INTO retval
FROM dual;

dbms_output.put_line(retval.validfrom);
dbms_output.put_line(retval.validtill);
END;
/
 
 

分享到:
评论

相关推荐

    oracle_wmsys用户

    在Oracle数据库环境中,WMSYS用户是一个特殊的角色,主要用于管理Oracle Warehouse Builder (OWB)的相关对象。OWB是一个数据仓库构建工具,它帮助用户设计、构建、部署和管理数据仓库。WMSYS用户拥有的权限使得它能...

    Oracle重建WMSYS用户及WMSYS.WM_CONCAT函数

    在Oracle中,WMSYS是系统内置的一个特殊用户,主要用于仓库管理服务(Warehouse Management System,简称WMS)相关的功能。WMSYS用户包含了用于执行WMS功能的一系列存储过程和函数,其中包括WM_CONCAT函数,它是一个...

    Oracle重建WMSYS用户及WMSYS.WM_CONCAT函数(更低分)

    `WMSYS`是Oracle数据库中的一个系统拥有的模式,它包含了与Oracle Warehouse Builder(OWB)相关的对象。OWB是一个用于数据仓库构建和维护的工具。`WM_CONCAT`函数是OWB的一部分,用于处理数据仓库中的数据聚合,...

    重建WMSYS用户.zip

    在Oracle数据库环境中,WMSYS用户是一个系统内置的特殊用户,主要用于管理Oracle Spatial和网络数据管理(Network Data Management,NDM)组件。WMSYS.WM_CONCAT是Oracle Spatial中的一个函数,用于处理多行文本数据...

    Oracle 11g 重建WMSYS.WM_CONCAT函数

    Oracle10g之后有些版本已不包含WMSYS.WM_CONCAT函数,若用到此函数, 系统会提示异常:ORA-00904: "WM_CONCAT": invalid identifier 因此需单独重建此函数,方法如下: 解压附件,在sqlplus中执行包里的owmctab....

    重建WMSYS用户的WMSYS.WM_CONCAT函数的3个文件

    在Oracle数据库环境中,WMSYS.WM_CONCAT函数是一个用于字符串连接的实用工具,尤其在处理多值列时非常有用。然而,有时由于各种原因,这个函数可能丢失或损坏,需要进行重建。以下是对重建WMSYS.WM_CONCAT函数涉及的...

    WMSYS_XE.zip

    linux 下 oracle11 XE 无WMSYS,将文件解压,并使用dba执行 @+地址+文件名 即可。例 @/home/oracle/app/oracle/product/WMSYS/owmctab.plb @/home/oracle/app/oracle/product/WMSYS/owmaggrs.plb @/home/oracle/...

    WMSYS 重建

    在Oracle数据库环境中,WMSYS用户是一个系统内置的用户,主要用于管理Oracle的仓库管理系统(Warehouse Manager,简称WM)的相关功能。WM是Oracle提供的一种高级数据仓库解决方案,它可以帮助企业进行数据加载、转换...

    ORA-00904 WMSYS.WM_CONCAT标识符无效解决方案

    在这种情况下,错误是针对"WMSYS.WM_CONCAT"函数的,这是一个在某些Oracle版本中提供的聚合函数,用于字符串连接。然而,从Oracle 11g Release 2开始,这个函数被弃用了,并在后续版本中完全移除,导致了“标识符...

    oracle12c_wmsys用户函数创建(1).sql

    oracle12c_wmsys用户函数创建(1).sql

    oracle行转列聚合函数WMSYS.WM_CONCAT

    ### Oracle行转列聚合函数WMSYS.WM_CONCAT详解 #### 一、概述 在进行数据处理时,经常会遇到需要将多行数据合并为单行的情况,这通常被称为“行转列”。Oracle数据库提供了多种方法来实现这一需求,其中`WMSYS.WM_...

    wmsys.wm_concat详细示例.txt

    在Oracle数据库中,`wmsys.wm_concat`是一个非常实用且强大的函数,主要用于将多个字符串连接成一个字符串。此函数常用于数据聚合场景,尤其是当需要在一个查询中汇总特定分组下的所有值时。根据给定文件的信息,...

    wmsys 用户 没有WMSYS.WM_CONCAT方法

    没有WMSYS.WM_CONCAT方法 需要的文件 owmctab.plb owmaggrs.plb owmaggrb.plb 拷贝三个文件到 $ORACLE_HOME\RDBMS\ADMIN\ 目录下 打开命令行 sqlpus , 用sys 登陆 执行命令 @$ORACLE_HOME\RDBMS\ADMIN\owmctab.plb...

    Oracle的默认用户密码

    Oracle数据库是一种广泛使用的大型关系型数据库管理系统,其安全性是系统管理员必须关注的重要方面。在安装Oracle数据库时,系统会创建一些预定义的用户账户,这些账户具有特定的权限,用于不同的管理和维护任务。当...

    类似于wmsys.wm_concat的自定义函数clob版

    在Oracle数据库中,`WMSYS.WM_CONCAT`函数是一个非常实用的工具,它用于将多行数据合并成一个单行字符串。然而,由于其内部处理机制,当需要合并的数据量过大时,可能会遇到“字符串缓冲区太小”的错误。这是因为`WM...

    wmsys_wm_concat函数结果拆解

    在Oracle数据库中,`wmsys.wm_concat`是一个常用的数据处理函数,主要用于连接字符串。它能够接受多个参数,并将这些参数用逗号分隔的形式存储为一个字符串。此函数广泛应用于数据仓库或报表系统中,特别是在需要将...

    oracle中将列拼接字段函数

    本文将详细介绍如何使用Oracle中的`WMSYS.WM_CONCAT`函数来实现列的拼接,并通过具体的例子帮助理解其应用场景。 ### Oracle中的WMSYS.WM_CONCAT函数 #### 函数介绍 `WMSYS.WM_CONCAT`函数是Oracle提供的一个用于...

Global site tag (gtag.js) - Google Analytics