日期:2014-05-16  浏览次数:20965 次

存储过程怎么使用程序创建?
我写了一个存储过程,希望能在程序运行的时候,第一次检查有无该过程,没有的话就自动创建,但我没有例子,在网上也找不到答案.

我用的是vb.net代码,希望有人能帮帮忙

------解决方案--------------------
SQL code

--用create or replace就可以了,不用检测存不存在
create or replace procedure test
is
begin
    dbms_output.put_line('test');
end;
/

------解决方案--------------------
感觉需求还是有些怪,可以用异常判断或者考虑楼上的方法判断存储过程是否已创建,若未创建,则参考一下代码创建:
SQL code
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;