2、 使用xmltable,"CONNECT BY 操作内存不足,10g开始支持XML后,改为xmltable就可以了",代码如下: create table bigdata as select rownum as id from xmltable('1 to 10000000'); ok,1000万数据完美插入
select rownum rn from dual connect by rownum<=xx; 3、自从10g开始支持XML后,还可以使用以下方式: select rownum rn from xmltable 但xmltable方式就不会耗这么多资源 lastwinner@lw> select count(*) from (select rownum rn from xmltable('1 to 1048576 但如果通过笛卡尔积+xmltable的方式来构造。 以上测试,总的可见,在构造较大序列时,笛卡尔积的方式是最佳的,单纯使用connect by会遭遇内存不足,而单独使用xmltable则会耗费较多的时间。 但考虑到书写的便利性,因此在构造较小序列的时候,比如不超过1K的序列,那么直接用connect by或xmltable的方式就好了。
.* FROM TEST_XML T, XMLTABLE('/messages/note' PASSING XMLTYPE(T.XMLS) COLUMNS "ID" VARCHAR2 ) PATH '/note/body') B; image.png 读取特定ID的记录 可以在PASSING路径中指定,或者在where条件中 SELECT B.* FROM TEST_XML T, XMLTABLE /note/heading', "BODY" VARCHAR2(50) PATH '/note/body') B; SELECT B.* FROM TEST_XML T, XMLTABLE "BODY" VARCHAR2(50) PATH '/note/body') B where B.ID = 501 image.png 获取特定属性的特定元素 也可也使用XMLTABLE
a123><NAME>John Doe</NAME><YEAR>30</YEAR></a123> 输出元组 {NAME = 'John Doe', YEAR = 30} 在PostgreSQL中,使用xmltable 函数可以实现类似效果: select * from xmltable( '/a123' passing '<a123><name>John Doe</name><YEAR>30</YEAR> Postgresql替代方法 测试1:无法展开 drop type ctype01; create type ctype01 as (name text, year int); select * from xmltable drop type ctype01; create type ctype01 as (a int, b int); select * from xmltable( '/a123' passing ></a123>' columns person ctype01 ); 结果 person ----------- (100,200) 测试3 select * from xmltable
可以提升效率. 2.提高代码可读性 使代码有层次感, 增强可读性, 下面是对连续编号进行分组的一个写法: with t as ( select rownum+1 as id from xmltable ('1 to 5') union select rownum+10 from xmltable('1 to 4') union select rownum+20 from xmltable ('1 to 2') union select rownum+30 from xmltable('1 to 3') ) ,mid1 as (select id,nvl(id-1-lag(id)
create table bigdata as select rownum as id, TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') as addDate from xmltable
在数据库中xml的定义和使用和一般的数据类型没有多大差别,比如: 创建表: create table xmltable(id int primary key,xml1 xml) 定义变量:declare
database no force logging; SQL> create table DEMO tablespace users pctfree 99 as select rownum n from xmltable table DEMO nologging; 之后使用/* +append*/插入数据并提交 SQL> insert /*+ append */ into DEMO select rownum n from xmltable
.* from dba_objects a,xmltable('1 to 1000') b where rownum<=5e6; alter table t5m add constraint pk_t5m_id
SQL> insert into test_money select rownum,1 from xmltable('1 to 10000000'); 10000000 rows created.
FORCE LOGGING; SQL> CREATE TABLE LHR.TESTDGNOLOG TABLESPACE USERS PCTFREE 99 AS SELECT ROWNUM N FROM XMLTABLE NOLOGGING; 之后使用/* +append*/插入数据并提交: SQL> INSERT /*+ APPEND */ INTO LHR.TESTDGNOLOG SELECT ROWNUM N FROM XMLTABLE
SQL功能:Identity Columns,Crash Safe,Replicable HashIndexes,Transition Tables for Triggers; XML和JSON:支持XMLTable 对GIS非常好,对JSON,JSONB,XMLTable支持非常好。 非常丰富的fdw扩展,几乎可以支持所有的外部数据源和数据库。
.* from t1 a,xmltable('1 to 1000') b where rownum<=1e7; --增加主键: alter table t10m add constraint pk_t10m
database no force logging; SQL> create table DEMO tablespace users pctfree 99 as select rownum n from xmltable DEMO nologging; 之后使用 /* +append*/ 插入数据并提交 SQL> insert /*+ append */ into DEMO select rownum n from xmltable
必须在物化视图的主表中创建物化视图日志materialized view logs;而对于direct-path INSERT操作,Oracle会自动创建 direct loader log 如果query包含分析函数或 XMLTable
sysdate, 'MONTH'), i) start_date, trunc(last_day(add_months(sysdate, i))) end_date from xmltable
sysdate, 'MONTH'), i) start_date, trunc(last_day(add_months(sysdate, i))) end_date from xmltable
(SYSDATE, 'MONTH'), i) start_date, TRUNC (LAST_DAY (ADD_MONTHS (SYSDATE, i))) end_date FROM XMLTABLE
with t as (select xmltype('value1value2') xmlvalfrom dual) select i from t a, xmltable('/
── xmladapter → myxmladapter (XML适配器) ├── xmlfield → myxmlfield (XML字段) └── xmltable