精华内容
下载资源
问答
  • Oracle使用EXTRACTVALUE函数解析XML

    千次阅读 2019-02-20 14:06:05
    Oracle使用EXTRACTVALUE函数解析XML 需求是将oracle数据库中将clob类型保存的xml文本在视图中解析传递给其他程序. 解析xml的方法有很多, 各种语言都有支持, 我曾试图通过java解析后再传递, 后来我发现oracle的...

    Oracle使用EXTRACTVALUE函数解析XML

    需求是将oracle数据库中将clob类型保存的xml文本在视图中解析传递给其他程序.
    解析xml的方法有很多, 各种语言都有支持, 我曾试图通过java解析后再传递, 后来我发现oracle的extractvalue也可以实现, 在oracle数据库的视图中直接使用就可以了.
    下面我先介绍extractvalue解析的两种方式.

    XML节点中含属性

    <AAA>
    	<BBB id = "b1"/>
    	<BBB id = "b2">
        	好转
        </BBB>
    	<BBB name = "bbb"/>
    	<BBB/>
    </AAA>
    

    以上内容保存在表binglinrjilunr字段, 其数据类型为clob, 如果我需要取节点<BBB id = "b2">好转</BBB>内的值, 只需以下的语句即可, 结果值为好转

    SELECT extractvalue(XMLTYPE(b.jilunr),'/AAA/BBB[@id="b2"]') FROM binglinr B
    

    XML节点中没有属性,且多个重复

    <AAA>
    	<BBB>
        	治愈
     	</BBB>
        <BBB>
        	好转
        </BBB>
    	<BBB>
        	其他
        </BBB>
    </AAA>
    

    如果要获取指定节点的值, 只需指定节点的序号即可, 比如我要获取好转的值,

    SELECT extractvalue(XMLTYPE(b.jilunr),'/AAA/BBB[2]') FROM binglinr B
    

    终极方案 从Oracle官网说起

    Oracle官网的说明EXTRACTVALUE
    如上文sql语句中所写, 传入的第二个参数是xmlxpath_string, 实际中只要满足xml的xPath解析规则都可以实现节点内容的获取, 具体的解析规则, 可以参考这篇文章xml的xPath解析规则

    注意事项

    实际使用中, 不应直接在sql语句中使用, 最好写一个函数, 当extractvalue解析出现异常情况(比如返回了多个节点)时以其他字符返回.

    展开全文
  • cx_Oracle使用方法

    万次阅读 2017-01-12 10:13:34
    cx_Oracle使用方法 正确安装好cx_oracle之后,要使用它来连接到oracle数据库进行操作,具体应该分3步走: 第一步:导入cx_Oracle ,建立连接 >>> import cx_Oracle # 导入模块 >>> db = cx_Oracle.connect...

    cx_Oracle使用方法

    正确安装好cx_oracle之后,要使用它来连接到oracle数据库进行操作,具体应该分3步走:

    第一步:导入cx_Oracle ,建立连接

    >>> import cx_Oracle      # 导入模块 
    >>> db = cx_Oracle.connect('hr', 'hrpwd', 'localhost:1521/XE') 建立连接,3 个参数分开写
    >>> db1 = cx_Oracle.connect('hr/hrpwd@localhost:1521/XE') 建立连接,3 个参数连写
    >>> dsn_tns = cx_Oracle.makedsn('localhost', 1521, 'XE')
    >>> print dsn_tns 
    (DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
    (CONNECT_DATA=(SID=XE)))
    >>> db2 = cx_Oracle.connect('hr', 'hrpwd', dsn_tns)
    >>> print db.version
    10.2.0.1.0
    >>> versioning = db.version.split('.')
    >>> print versioning
    ['10', '2', '0', '1', '0']
    >>> if versioning[0]=='10':
    ...       print "Running 10g"
    ... elif versioning[0]=='9':
    ...      print "Running 9i"
    ...
    Running 10g
    >>> print db.dsn
    localhost:1521/XE

    第二步:建立 Cursor 光标

    >>>cursor = db.cursor() 建立一个cursor
    之后,我们可以调用这个cursor.execute(‘SQL‘) 来执行SQL语句。比如:
    >>>cursor.execute(‘select * from tabs’)
    执行完毕以后,可以调用cursor.fetchall()一次取完所有结果,或者cursor.fetchone()一次取一行结果
    >>>row=cursor.fetchall()
    >>>for row in rows:
          For v in row:
             Print v,
           Print

    这样就可以按照表格的形式打印取得的结果了!
    在从oracle取出数据的时候,考虑到它的数据类型了吗?下面就是数据类型的对应表

    带参数的查询:

    >>> named_params = {'dept_id':50, 'sal':1000}
    >>> query1 = cursor.execute('SELECT * FROM employees WHERE department_id=:dept_id AND salary>:sal', named_params)
    >>> query2 = cursor.execute('SELECT * FROM employees WHERE department_id=:dept_id AND salary>:sal', dept_id=50, sal=1000)
    这种是名字参数,还可以按位置参数:
    r1 = cursor.execute('SELECT * FROM locations WHERE country_id=:1 AND city=:2', ('US', 'Seattle'))
    注意:
    当只有一次参数的时候,也要把它写成元组的形式,比如
    Cursor.execute(‘select name from user where id=:1’,(login_Id,))
    千万要注意,login_id后面还带有一个逗号!
    Cursor. Prepare的用法,
    这个方法就是在prepare之后,你再去execute的时候,就不用写上sql语句参数了
    >>> cursor.prepare('SELECT * FROM jobs WHERE min_salary>:min')
    >>> r = cursor.execute(None, {'min':1000}) #注意,第一个参数是None,

    一次执行多条sql语句

    Large insert operations don't require many separate inserts because Python fully supports inserting many rows at once with the cx_Oracle.Cursor.executemany method. Limiting the number of execute operations improves program performance a lot and should be the first thing to think about when writing applications heavy on INSERTs.
    Let's create a table for a Python module list, this time directly from Python. You will drop it later.

    >>> create_table = """
    CREATE TABLE python_modules (
      module_name VARCHAR2(50) NOT NULL,
      file_path VARCHAR2(300) NOT NULL
    )
    
    >>> from sys import modules
    >>> cursor.execute(create_table)
    >>> M = []
    >>> for m_name, m_info in modules.items():
    ...     try:
    ...       M.append((m_name, m_info.__file__))
    ...     except AttributeError:
    ...       pass
    ...
    
    >>> len(M)
    76
    >>> cursor.prepare("INSERT INTO python_modules(module_name, file_path) VALUES (:1, :2)")
    >>> cursor.executemany(None, M)
    >>> db.commit()
    >>> r = cursor.execute("SELECT COUNT(*) FROM python_modules")
    >>> print cursor.fetchone()
    (76,)
    >>> cursor.execute("DROP TABLE python_modules PURGE")
    展开全文
  • ORACLE 使用关联更新做update 优化方案

    千次阅读 2018-11-12 09:53:55
    ORACLE 使用关联更新做update 优化方案 ** ORACLE数据库关系更新/修改 优化方案 –感谢您在百忙之中,来捧场,笔者有什么不对的地方,感谢您的纠正。 我们可以做个实验去验证一下 这里我们使用的是scott测试账户,方便...

    ORACLE 使用关联更新做update 优化方案

    **

    ORACLE数据库关系更新/修改 优化方案

    –感谢您在百忙之中,来捧场,笔者有什么不对的地方,感谢您的纠正。
    我们可以做个实验去验证一下
    这里我们使用的是scott测试账户,方便教学。

    create table t1 as select * from dba_objects;
    create table t2 as select * from dba_objects;
    

    –创建需要的话需要DBA的权限,大家提示表或视图不存在的,可以登录

    自己的sysdba账户,给自己的scott账户授权。
    要求:使用关联更新的方式,去做修改/更新
    1、 用关联更新的方法 将t1的数据还原?

    第一种:
    update t1
    set t1.owner = (select t2.owner
    from t2
    where t1.object_id = t2.object_id);
    

    这里的object_id是一个主键。
    大家可以去运行一下,一般设备都需要5分钟左右,性能很差,如果表再大一些的话,就完全不行了。
    那么问题来了,我们就需要去优化他,提高性能。
    优化方案
    第一种:比较简单,适用于返回值比较少,(小表)—创建索引

    create index idx_objectid on t2(object_id);
    update t1
    set t1.owner = (select t2.owner
    from t2
    where t1.object_id = t2.object_id);
    

    –创建索引之后,可以重新运行一下,基本是秒修改的。

    第二种:可以使用比较简单的merge into语句,很常用

    merge into t1
    using t2
    on (t1.object_id = t2.object_id)
    when matched then
    update set t1.owner=t2.owner;
    when not matched then
    insert
    values
    (t2.owner, t2.object_name, t2.subobject_name, t2.object_id, t2.data_object_id, t2.object_type,  t2.created, t2.last_ddl_time, t2.timestamp, t2.status, t2.temporary, t2.generated, t2.secondary,  t2.namespace, t2.edition_name);
    

    —这种方法也是秒更新。

    除了这两种,还可以使用游标去做更新
    1、单行游标

    declare
    cursor cur_update is
    select t1.object_id,t2.object_id,t1.rowid rid
    from t1,t2
    where t1.object_id = t2.object_id
    order by rowid;
    ln_cnt number;
    begin
    ln_cnt :=0;
    for x in … cur_update loop
    update t1
    set t1.owner = t2.owner
    where rowid = x.rid
    ln_cnt :=ln_cnt + 1;
    if (ln_cnt >= 2000) then
    commit;
    end if;
    ln_cnt :=0;
    end loop;
    commit;
    end;
    

    作者:wang6596639
    来源:CSDN
    原文:https://blog.csdn.net/wang6596639/article/details/83963720
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • ORACLE 使用 LIKE 模糊查询效率慢

    千次阅读 2018-05-03 17:24:15
    ORACLE 使用 LIKE 模糊查询效率慢   原因: 1、使用 LIKE 模糊查询效率慢会索引失效从而引起全表扫描。   解决方法: 1、将like '%%' 改成 ‘% ' 或 ’%‘. 2、使用Oracle内部函数:INSTR()。 如: ...

    ORACLE 使用 LIKE 模糊查询效率慢

     

    原因:

    1、使用 LIKE 模糊查询效率慢会索引失效从而引起全表扫描。

     

    解决方法:

    1、将like '%%' 改成 ‘% ' 或 ’%‘.

    2、使用Oracle内部函数:INSTR()。

    如:

    SELECT S_PORT_ID,S_MOI_NAME,S_NATIVE_NE_NAME,S_PORT_NO,S_REMARK FROM T_TRANS_PORT WHERE INSTR(S_MOI_NAME,'惠州江北8楼')

    更多精彩技术分享请浏览本人博客:https://blog.csdn.net/wohiusdashi

    展开全文
  • Oracle使用sample获得随机结果集

    千次阅读 2018-05-10 11:52:41
    Oracle使用sample获得随机结果集 语法: SAMPLE [ BLOCK ](sample_percent)[ SEED (seed_value) ] SAMPLE选项:表示按行采样来执行一个全表扫描,Oracle从表中读取特定百分比的记录,并判断是否满足WHERE子句以...
  • Oracle使用游标更新数据 2016年11月20日 13:15:49 hzwy23 阅读数:5313 友情推广 ###使用游标修改数据 ####定义一个游标,游标名称为 mycursor #####更新scott用户中emp表中empno为7369的销售额 -- ...
  • oracle使用like匹配特殊字符解决办法

    千次阅读 2017-02-16 00:39:15
    oracle使用like匹配特殊字符解决办法
  • oracle使用命令连接到sys超级用户

    千次阅读 2017-07-17 15:48:31
    oracle使用命令连接到sys超级用户 1、输入conn sys; 密码格式:密码 + as sysdba(因为oracle输入密码时不显示符号,注意空格)。
  • Oracle使用scott用户登录提示密码过期在初次安装oracle的时候,很多人在解锁scott用户的同时会忘记给scott 用户初始化密码, 但是oracle会给scott 用户设置一个默认的密码那就是tiger , 可是在安装成功之后使用...
  • 为什么Mysql使用多线程,而Oracle使用多进程 菜鸟不明白,于是搜索了一下,现在大致整理出来如下: 传统的unix系统,早期没有提供多线程,只有多进程。linux是最近的版本才加入多线程支持,以前一直都是多进程。...
  • oracle 使用异常exception

    万次阅读 2018-09-26 10:02:08
    Oracle提供了预定义例外、非预定义例外和自定义例外等三种例外类型,其中预定义例外用于处理常见的Oracle错误,非预定义例外用于处理预定义例外所不能处理的Oracle错误,自定义例外用于处理与Oracle错误无关的其他...
  • oracle 使用spool导出数据到文件

    万次阅读 2016-08-06 17:49:56
    --oracle 使用spool导出数据到文件 需要将数据库中的数据以txt文本形式导出,可以用spool方式导出。 --创建脚本文件 spool.sql --添加如下语句 SPOOL D:\works\数据库dump\spool\bbb.txt set echo off ...
  • plsql连接oracle使用like模糊查询中文不成功的问题 执行:select userenv(‘language’) from dual;查看oracle服务器的编码集 在你的操作系统下,设置环境变量。 变量名:NLS_LANG,变量值:(第一步的编码集...
  • oracle 使用toad 查看空间使用

    千次阅读 2018-01-03 14:56:21
    使用toad for oracle 可以查看数据库空间的使用率,具体方法如下; 可以发现有好多选项
  • Oracle使用Scott用户登录

    千次阅读 2019-07-29 16:15:32
    学习者能够用Scott登录系统,注意scott用户登录后,就能够使用Oracle提供的数据库和数据表,这些都是oracle提供的。学习者不须要自己创建数据库和数据表,直接使用这些数据库和数据表练习SQL。 1、打开...
  • Oracle使用load操作出现中文乱码问题
  • oracle 使用listagg函数后 字符串连接的结果过长最终解决 SELECT r.department_id law_dept_id, ( SELECT xmlagg(xmlparse(content rt.extracted_person_ids||',' wellformed) order by rt.extracted_p...
  • oracle使用方法总结

    万次阅读 2014-12-09 10:29:16
    为一个公司做一个项目,结果他们的项目需要用oracle数据库,所以就用了一个月的时间学习了oracle数据库的使用,并完成了这个项目。在这里总结一下oracle数据库的使用方法。 (一)安装oracle数据库  我的电脑为64位...
  • oracle使用using关键

    千次阅读 2018-03-22 09:12:09
    转自:https://www.2cto.com/database/201503/384694.htmlsql/92标准可以使用using关键字来简化连接查询,但是只是在查询满足下面两个条件时,...例如:使用using关键字,如下:1234567891011121314151617181920212...
  • Oracle使用expdp时遇到ORA-39002、ORA-39070错误  使用expdp时,遇到”ORA-39002、ORA-39070......”连续报错。 1、 遇到的问题 C:\Users\Administrator>expdp 'sys/system as sysdba' directory=backup ...
  • ORACLE使用WITH AS和HINT MATERIALIZE优化SQL解决FILTER效率低下
  • 项目中Oracle使用druid数据库连接池,为了提高访问数据库的效率,开启了PreparedStatement Cache。但是随着项目的运行,也出现了一些问题,在项目运行的过程中,给表添加字段后,会一直出现"ORA-17401:违反协议"异常...
  • ORACLE使用DBLINK导入导出数据

    千次阅读 2018-01-09 18:23:59
    ORACLE数据库A:172.18.169.81:1521/orcl ORACLE数据库B:127.0.0.1:1521/orcl 要将数据库A的所有数据导入到数据库B。 由于数据量极大,所以直接exp太慢,不能用 懒,不愿意写expdp,所以使用DBLINK进行导入。 ...
  • linux中oracle使用root登陆

    千次阅读 2017-10-31 12:00:55
    使用root用户登录oracle oracle在安装后会有默认的两个管理员账户sys和system sys超级管理员 system系统管理员 [root@localhost ~]# sqlplus sys/passwd as sysdba 或者 sqlplus sys/passwd as sysoper#sys...
  • Oracle使用管理员账户登录

    万次阅读 2018-10-10 10:44:22
    在校学习Oracle数据库时没有注意过这些细节抑或是时间太久没操作已经忘却了,昨天尝试本地建库使用nifi时发现scott账户被放开以后可以登录但是sys和system两个管理员账户在sqlplus和navicat上都无法登录,后来查阅...
  • oracle 使用ANY运算符

    千次阅读 2016-10-04 18:41:17
    ANY运算符必须与单行比较运算符结合使用,并且返回行只要匹配子查询的任何一个结果即可. 例子:在emp表中,查询工资大于部门比编号为10的任意一个员工工资即可的其他部门的员工信息。 select deptno ,ename,sal ...
  • navicat连接Oracle使用说明

    千次阅读 2015-11-11 14:54:35
    最近项目使用Oracle11g,以前一直是用Mysql比较多,客户端也比较多用起来也很方便,于是从网上下了个Pl/Sql,可能是我太笨,搞了半天就是连接不上,醉了。没办法,又下载了个Navicat for Oracle,因为我的Oracle版本...
  • Oracle 11gR2开始,Oracle推荐使用deinstall来卸载Oracle数据库。使用Oracle Universal Install(OUI) 的图形方式来卸载Oracle数据库软件了,会看到下图警告: "请运行命令D:\app\admin\product\11.2.0\dbhome_1\...
  • Spotlight on oracle 使用

    千次阅读 2011-12-15 17:24:56
    Spotlight on oracle 主要是用来监控数据库性能的,还可以监控服务器的资源使用情况。 前两天下载了试用版本,我下载的是6.0.0.1325版本,大小:162MB。 安装工具,打开工具,可以先看一下主界面: 可以看到...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 175,291
精华内容 70,116
关键字:

oracle使用