日期:2014-05-16 浏览次数:21065 次
--用create or replace就可以了,不用检测存不存在 create or replace procedure test is begin dbms_output.put_line('test'); end; /
------解决方案--------------------
感觉需求还是有些怪,可以用异常判断或者考虑楼上的方法判断存储过程是否已创建,若未创建,则参考一下代码创建:
CREATE OR REPLACE PROCEDURE pnew AS v_sql VARCHAR2(1000):= 'CREATE OR REPLACE PROCEDURE p01 AS BEGIN NULL; END p01; '; BEGIN execute immediate v_sql; EXCEPTION WHEN OTHERS THEN raise_application_error(-20102,'** create procedure error **' ||sqlerrm); END pnew;
------解决方案--------------------
上面即是用pnew创建p01存储过程的简单逻辑,如果要用vb.net创建,表示无能为力..
------解决方案--------------------
如果想检查,select * from dba_procedures where product_name='...'
创建完了默认就编译了一次。或许你动态创建的是错误的。要不,你在plsql环境中编译一次,看看错误。
实在不行,动态创建完了还可以动态编译一次。
动态执行 alter procedure p_doexec compile;