oracle 使用杂记

  1. select a.c1,b.c2 from ta a,tb b
       不指定条件的连接查询会把两个表的记录按笛卡尔积连接起来(nxn)

  2. 静态cursor与REF cursor

    • 静态光标不能返回到客户端,ref光标能够被返回到客户端。
    • ref光标不能全局定义,必须在过程中处理它,或返回到客户端应用程序。
    • ref光标可以从子例程传递到父例程,而光标则不能。
  3. 动态游标最好不要自己定义,用oracle定义好的sys_refcursor。

  4. 游标for循环适用静态游标
    5.ORA-01002: 提取违反顺序
       原因1:在存储过程中已经fetch 了游标,而没有关闭游标,在java调用存储过程再次读取游标造成的。

  5. any/all的用法
    其后可以加列明和和常数,列必须是group by 中包含的。
    select distinct name from student group by name,fenshu having fenshu>any 80

  6. 查找所有成绩>80的学生

    select name  from student t group by name having 80 <all ( select fenshu from student where t.name=name)
    
  7. sum完成多类型数量统计

    select sum (case when fenshu>80 then 1 else 0 end) 优秀,sum (case when fenshu<=80 then 1 else 0 end) 及格 from student t
    
  8. 事务

    1. 事务特性:ACID

      • 原子性(atomicity):个事务中的所有操作,相当于一个原子操作,要么全部成功,要么全部失败
      • 一致性(consistency):由程序员保证,最经典案例:转账
      • 隔离性(isolation):指事务和事务之间的数据可见性,是最容易出问题的地方
      • 持久性(durability):事务完成以后,所有的数据都将持久到数据库中,不会因为其他原因而丢失
    2. 事务隔离性
      可能出现的问题:

      • 更新丢失:多个事务对一条数据同时更新,结果相互覆盖
      • 脏读:读取到未提交数据
      • 不可重复读:多次重复读取某条记录,结果不一致
      • 幻读:多次读取,记录的数量不一致

      解决问题:主要通过锁来解决,用锁来实现不同的隔离级别

      • 读未提交:没解决上述任何问题,
      • 读已提交:解决脏读
      • 可重复读:解决不可重复读,mysql可以解决幻读
      • 串行处理:所有事务串行执行,可以解决上述所有问题,但极大的降低数据库效率。

      更新丢失往往由程序员处理

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cx_Oracle是一个Python的第三方包,用于连接和操作Oracle数据库。它提供了一系列的方法和函数,以便在Python中执行SQL语句、调用存储过程和函数等数据库操作。在使用cx_Oracle时,需要先安装这个包,并根据需要进行配置。 在使用cx_Oracle进行数据库操作时,通常的步骤如下: 1. 导入cx_Oracle模块:使用import cx_Oracle语句导入模块。 2. 建立数据库连接:使用cx_Oracle.connect()函数建立与数据库的连接。需要提供数据库的用户名、密码以及数据库地址等连接信息。 3. 创建游标对象:使用连接对象的cursor()方法创建一个游标对象,用于执行SQL语句和调用存储过程。 4. 执行SQL语句:使用游标对象的execute()方法执行SQL语句。可以通过fetchone()、fetchall()等方法获取查询结果。 5. 调用存储过程和函数:使用游标对象的callproc()方法调用存储过程,通过callfunc()方法调用函数。需要提供存储过程或函数的名称、参数等信息。 6. 关闭游标和连接:使用游标对象的close()方法关闭游标,使用连接对象的close()方法关闭连接。 下面是一个使用cx_Oracle连接和操作Oracle数据库的示例代码: ```python import cx_Oracle # 建立数据库连接 conn = cx_Oracle.connect('用户名/密码@数据库地址/数据库名称') # 创建游标对象 cursor = conn.cursor() # 执行SQL语句 cursor.execute('SELECT * FROM 表名') # 获取查询结果 result = cursor.fetchall() print(result) # 调用存储过程 out_var = cursor.var(cx_Oracle.STRING) cursor.callproc('存储过程名', [参数1, 参数2, out_var]) print(out_var.getvalue()) # 关闭游标和连接 cursor.close() conn.close() ``` 需要注意的是,使用cx_Oracle操作Oracle数据库需要先安装Oracle客户端,并将Oracle客户端的路径配置到系统环境变量中。具体安装和配置过程可以参考cx_Oracle官方文档或相关教程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值