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 Warehouse Builder (OWB)的相关对象。OWB是一个数据仓库构建工具,它帮助用户设计、构建、部署和管理数据仓库。WMSYS用户拥有的权限使得它能...
在Oracle中,WMSYS是系统内置的一个特殊用户,主要用于仓库管理服务(Warehouse Management System,简称WMS)相关的功能。WMSYS用户包含了用于执行WMS功能的一系列存储过程和函数,其中包括WM_CONCAT函数,它是一个...
`WMSYS`是Oracle数据库中的一个系统拥有的模式,它包含了与Oracle Warehouse Builder(OWB)相关的对象。OWB是一个用于数据仓库构建和维护的工具。`WM_CONCAT`函数是OWB的一部分,用于处理数据仓库中的数据聚合,...
在Oracle数据库环境中,WMSYS用户是一个系统内置的特殊用户,主要用于管理Oracle Spatial和网络数据管理(Network Data Management,NDM)组件。WMSYS.WM_CONCAT是Oracle Spatial中的一个函数,用于处理多行文本数据...
Oracle10g之后有些版本已不包含WMSYS.WM_CONCAT函数,若用到此函数, 系统会提示异常:ORA-00904: "WM_CONCAT": invalid identifier 因此需单独重建此函数,方法如下: 解压附件,在sqlplus中执行包里的owmctab....
在Oracle数据库环境中,WMSYS.WM_CONCAT函数是一个用于字符串连接的实用工具,尤其在处理多值列时非常有用。然而,有时由于各种原因,这个函数可能丢失或损坏,需要进行重建。以下是对重建WMSYS.WM_CONCAT函数涉及的...
linux 下 oracle11 XE 无WMSYS,将文件解压,并使用dba执行 @+地址+文件名 即可。例 @/home/oracle/app/oracle/product/WMSYS/owmctab.plb @/home/oracle/app/oracle/product/WMSYS/owmaggrs.plb @/home/oracle/...
在Oracle数据库环境中,WMSYS用户是一个系统内置的用户,主要用于管理Oracle的仓库管理系统(Warehouse Manager,简称WM)的相关功能。WM是Oracle提供的一种高级数据仓库解决方案,它可以帮助企业进行数据加载、转换...
在这种情况下,错误是针对"WMSYS.WM_CONCAT"函数的,这是一个在某些Oracle版本中提供的聚合函数,用于字符串连接。然而,从Oracle 11g Release 2开始,这个函数被弃用了,并在后续版本中完全移除,导致了“标识符...
oracle12c_wmsys用户函数创建(1).sql
### Oracle行转列聚合函数WMSYS.WM_CONCAT详解 #### 一、概述 在进行数据处理时,经常会遇到需要将多行数据合并为单行的情况,这通常被称为“行转列”。Oracle数据库提供了多种方法来实现这一需求,其中`WMSYS.WM_...
在Oracle数据库中,`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`函数是一个非常实用的工具,它用于将多行数据合并成一个单行字符串。然而,由于其内部处理机制,当需要合并的数据量过大时,可能会遇到“字符串缓冲区太小”的错误。这是因为`WM...
在Oracle数据库中,`wmsys.wm_concat`是一个常用的数据处理函数,主要用于连接字符串。它能够接受多个参数,并将这些参数用逗号分隔的形式存储为一个字符串。此函数广泛应用于数据仓库或报表系统中,特别是在需要将...
本文将详细介绍如何使用Oracle中的`WMSYS.WM_CONCAT`函数来实现列的拼接,并通过具体的例子帮助理解其应用场景。 ### Oracle中的WMSYS.WM_CONCAT函数 #### 函数介绍 `WMSYS.WM_CONCAT`函数是Oracle提供的一个用于...