oracle怎么编译无效,oracle无效sql语句

如何在Oracle中重编译所有无效的存储过程

:在SQL_PLUS中:spool ExecCompProc.sql select 'alter procedure ' ||object_name||' compile;' From all_objects where status = 'INVALID' and object_type = 'PROCEDURE'; spool off @ExecCompProc.Sql;整理成一个存储过程:Create Or Replace Procedure Zl_Compile_Invalid_Procedure AsStrsql Varchar2(200);BeginFor x In (Select Object_Name From All_Objects Where Status = 'INVALID' And Object_Type = 'PROCEDURE') LoopStrsql := 'Alter Procedure ' || x.Object_Name || ' Compile';Begin Execute Immediate Strsql; Exception--When Others Then Null; When OTHERS Then dbms_output.put_line(Sqlerrm); End;End Loop;End;最后执行:exec Zl_Compile_Invalid_Procedure;如果要看到无法重编译的过程的出错信息,需要执行前设置set serverout on。

创新互联建站主要从事成都网站制作、做网站、外贸营销网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务沙河,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

oracle form 无法编译,求助

个人观点:

1 last_ddl_time就是指最后一次编译的时间。 你认为的create or replace 其实就是一种编译

2 A调用B引发的B的重新编译。

我认为A调用B是不会引起B的编译的。从2个方面解释:

1) 我个人工作经验中没有发现A调用B会让B重新编译。

案例:B中引用了一张表。我将表删除了,编译B。那么B出现了错误。此时我又将表还原了。再去编译A。注意:A中调用B。但是B是错误的。如果调用B让B也编译的话,那么B会编译通过,A没问题。事实上:由于B的错误,导致A编译也错误。可见B并没有编译。

2)存储过程的一个优点是什么?就是一次编译,到处运行。这个编译时比较消耗资源的。从常理上讲,如果每次调用A引发了B的编译,那么存储过程的上述的优点浩然无存。所以从常理推断,A调用B不会引发B的编译。

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

早上看到了你昨晚发的信息。尝试了下。你的结论是有一半是正确的。

正确的解释应该是:

1 假设A、B都是正确的 那么调用的时候无需编译;

2 假设A、B是无效的。那么调用的时候会去编译它。

Oracle会自己判断A、B是否有效,再根据情况决定是否去编译。

如何重编译ORACLE数据库的无效对象

如果无效对象的数量很少,那么你可以逐个编译这些对象.

ALTER PACKAGE my_package COMPILE;

ALTER PACKAGE my_package COMPILE BODY;

ALTER PROCEDURE my_procedure COMPILE;

ALTER FUNCTION my_function COMPILE;

ALTER TRIGGER my_trigger COMPILE;

ALTER VIEW my_view COMPILE;

oracle 过程 重新编译也无效

编译完成,不代表里面语句没问题,这种情况是存储过程里存在某种错误

在 SQL *Plus 或者 PL/SQL Developer 的 Command Windows 中,执行

show errors procedure USP_EXCEPTION;

查看一下错误是什么.

我的修改如下:

CREATE OR REPLACE PROCEDURE USP_EXCEPTION(EMPNO INTEGER, --批次ID

P_FM NUMBER, --分母

P_FZ NUMBER, --分子

P_RESULT OUT NUMBER --结果

) IS

V_RAISE EXCEPTION; --异常处理

type type_table_pcmx is varray(4) of varchar2(20);

TABLE_PCMX type_table_pcmx;

BEGIN

IF P_FZ = 0 THEN

RAISE V_RAISE;

END IF;

P_RESULT := P_FM / P_FZ;

SELECT ENAME, EMPNO, JOB, DEPTNO

INTO TABLE_PCMX(1),TABLE_PCMX(2),TABLE_PCMX(3),TABLE_PCMX(4)

FROM EMP

WHERE EMPNO = EMPNO;

EXCEPTION

WHEN V_RAISE THEN

RAISE_APPLICATION_ERROR(-20010, 'ERROR:分子为零!');

WHEN NO_DATA_FOUND THEN

RAISE_APPLICATION_ERROR(-20011, 'ERROR:批次明细不存在!');

WHEN OTHERS THEN

RAISE_APPLICATION_ERROR(-20012, 'ERROR:数据错误!');

END;

oracle程序包或函数处于无效状态

1、你的存储过程有错误,编译不通过。处理于无效状态。2、问题 存储过程中隐式游标的select 语句必须要有into子句。 而 select * from temp_syckzl_zy 这是一个没有意义的语句; 应改为如:select col1 into v_col1 from temp_syckzl_zy; 注:col1为表中一字段,v_col1为一变量


名称栏目:oracle怎么编译无效,oracle无效sql语句
本文链接:http://myzitong.com/article/heddio.html