重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Oracle中出现无效对象,就是因为在创建函数或存储过程等,里边的内容书写不正确导致。如果要重新编译,需要先修正错误,然后编译。
成都创新互联-专业网站定制、快速模板网站建设、高性价比武清网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式武清网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖武清地区。费用合理售后完善,十载实体公司更值得信赖。
工具:Oracle 10g、PL/SQL
步骤:
1、在PL/SQL中打开出现编译错误的函数或存储过程,这里以存储过程为例。
2、右键点击该存储过程,选择“编辑”。
3、根据错误提示,找到错误,并修改错误。
4、改正错误后,点击左上方的“齿轮”状按钮。
5、运行成功后,则该存储过程就会变为编译成功的状态。
sqlplus有相关的了命令:比如alter procedure prodedure_name compile;
第一次编译的时候只要在后面加一个/当做执行符号,那么就可以进行编译。
1.批量编译存储工程的存储过程
create or replace procedure compile_invalid_procedures(
p_owner varchar2 -- 所有者名称,即 SCHEMA) as--编译某个用户下的无效存储过程
str_sql varchar2(200);begin
for invalid_procedures in (select object_name from all_objects
where status = 'INVALID' and object_type = 'PROCEDURE' and owner=upper(p_owner))loop
str_sql := 'alter procedure ' ||invalid_procedures.object_name || ' compile';begin
execute immediate str_sql;exception
--When Others Then Null;
when OTHERS Then
dbms_output.put_line(sqlerrm);end;end loop;end;
2.批量编译视图的存储过程
//通过编写的连接类创建一个连接
dbconn db = new dbconn();
Connection con1 = db.conn;
String callSQL1 = new String();
ResultSet rs1 = null;
//创建一个CallableStatement变量st1来调用存储过程信息
CallableStatement st1 = null;
try {
st1 = con1.prepareCall("{ call p(?,?,?,?) }");
st1.setString(1, "参数1");
st1.setString(2, "参数2");
st1.setString(3, "参数3");
st1.registerOutParameter(4,Types.INTEGER); //此处4 代表第一个"?" 则表示存储过程返回的值 这里要注意Types的类型,当需要有返回值时
st1.execute();
System.out.println(st1.getInt(4));//输出存储过程的返回值,当有返回值时
} catch (Exception error) {
try {
con1.rollback(); //操作不成功则回退
} catch (Exception ex9) {
ex9.printStackTrace();
}
out.print("系统出错" + error.getMessage());
} finally {
try {
if (st1 != null) {
st1.close();
}
} catch (Exception error) {
}
db.disconnect();
}