ORACLE批量编译无效对象

转帖:http://www.aixchina.net/Question/26869-397020

原文如下:

SET feedback OFF
SET heading OFF
SET linesize 1000
SET pagesize 0
SET pause OFF
SET trimspool ON
SET verify OFF

spool tmp.sql;

--组装SQL语句
SELECT 'alter '||object_type||' '||owner||'.'||object_name||' compile;'
FROM all_objects
WHERE status = 'INVALID'
AND object_type in
('FUNCTION','JAVA SOURCE','JAVA CLASS','PROCEDURE','PACKAGE','VIEW','TRIGGER'); 

--组装SQL语句
SELECT 'alter package '||owner||'.'||object_name||' compile body;'
FROM all_objects
WHERE status = 'INVALID'
AND object_type = 'PACKAGE BODY';
spool OFF;

--执行脚本
@tmp.sql

最后请注意登录ORACLO的权限

--------------------------------------

尝试了下很实用

vi 一个文件‘ORACLE批量编译无效对象.sql’写进脚本内容

sqlplus > @ORACLE批量编译无效对象.sql

之后生成一个tmp.sql脚本,再执行

sqlplus > @tmp.sql


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 MyBatis 中进行批量插入操作时,如果你想要返回插入后的对象,可以通过两种方式实现。 第一种方式是在插入 SQL 语句中使用 RETURNING 子句,返回插入后的结果集。具体步骤如下: 1. 在 MyBatis 的映射文件中编写插入语句,使用 RETURNING 子句返回插入后的结果集,例如: <insert id="batchInsertUsers" parameterType="java.util.List" useGeneratedKeys="true" keyProperty="id"> insert into USER (NAME, AGE) values (#{name}, #{age}) returning ID, NAME, AGE into #{id}, #{name}, #{age} </insert> 2. 在 Java 代码中调用插入方法时,使用 MyBatis 的 ExecutorType.BATCH 执行器类型,并在插入方法的参数中传入一个空的结果集,例如: List<User> users = new ArrayList<>(); SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); try { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.batchInsertUsers(users); sqlSession.commit(); } finally { sqlSession.close(); } 3. 在插入方法执行完毕后,你可以在结果集中获取插入后的对象,例如: for (User user : users) { System.out.println(user.getId() + " " + user.getName() + " " + user.getAge()); } 第二种方式是使用 Oracle 的 RETURNING INTO 语句将插入后的数据存入一个临时表中,然后再通过查询临时表的方式获取插入后的数据。具体步骤如下: 1. 在 Oracle 中创建临时表,例如: create global temporary table TEMP_USER (ID number, NAME varchar2(20), AGE number) on commit preserve rows; 2. 在 MyBatis 的映射文件中编写插入语句,使用 RETURNING INTO 语句将插入后的数据存入临时表中,例如: <insert id="batchInsertUsers" parameterType="java.util.List"> declare type USER_LIST is table of USER%rowtype; l_users USER_LIST := USER_LIST(); begin for i in 1..l_users.count loop insert into USER (NAME, AGE) values (l_users(i).NAME, l_users(i).AGE) returning ID into l_users(i).ID; end loop; forall i in 1..l_users.count insert into TEMP_USER values (l_users(i).ID, l_users(i).NAME, l_users(i).AGE); end; </insert> 3. 在 Java 代码中调用插入方法时,使用 MyBatis 的 ExecutorType.BATCH 执行器类型,并在插入方法的参数中传入一个空的结果集,例如: List<User> users = new ArrayList<>(); SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); try { UserMapper userMapper = sqlSession.getMapper(UserMapper.class); userMapper.batchInsertUsers(users); sqlSession.commit(); } finally { sqlSession.close(); } 4. 在插入方法执行完毕后,你可以通过查询临时表的方式获取插入后的数据,例如: List<User> insertedUsers = sqlSession.selectList("select * from TEMP_USER"); for (User user : insertedUsers) { System.out.println(user.getId() + " " + user.getName() + " " + user.getAge()); } 这两种方式都可以实现在 MyBatis 中进行批量插入操作,并返回插入后的对象。你可以根据自己的需求选择其中一种方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Knuuy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值