我写了一个存储过程,希望能在程序运行的时候,第一次检查有无该过程,没有的话就自动创建,但我没有例子,在网上也找不到答案.我用的是vb.net代码,希望有人能帮帮忙

解决方案 »

  1.   


    --用create or replace就可以了,不用检测存不存在
    create or replace procedure test
    is
    begin
        dbms_output.put_line('test');
    end;
    /--或者你用下面的语句判断是否存在,TEST为你的存储过程名字
    select count(1) from all_objects where object_type='PROCEDURE'
    and object_name ='TEST';
      

  2.   

    楼上的,我说的是在程序中,EXE,程序来自动创建存储过程哦!
      

  3.   

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

  4.   

    上面即是用pnew创建p01存储过程的简单逻辑,如果要用vb.net创建,表示无能为力..
      

  5.   

           Dim sql As String
            sql = My.Resources.strChai           
            Dim CN As OracleConnection
            CN = New OracleConnection(LianJie)        Try
                CN.Open()
                Dim cmd As OracleCommand = New OracleCommand(sql, CN)
                cmd.ExecuteNonQuery()
                cmd.ExecuteNonQuery()sql里面就是一个完整的存储过程,在pl/sql里面可以正常创建,但在程序中创建的时候就多了个红叉...好象没有经过编译1~
      

  6.   

    如果想检查,select * from dba_procedures where product_name='...'创建完了默认就编译了一次。或许你动态创建的是错误的。要不,你在plsql环境中编译一次,看看错误。实在不行,动态创建完了还可以动态编译一次。动态执行 alter  procedure  p_doexec compile;
      

  7.   

    plsql环境下按一下编译,马上就通过了,我自己感觉是程序里面的创建代码可能是错误的,可我在网上就没找到一个使用代码创建存储过程的例子