--用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';
楼上的,我说的是在程序中,EXE,程序来自动创建存储过程哦!
感觉需求还是有些怪,可以用异常判断或者考虑楼上的方法判断存储过程是否已创建,若未创建,则参考一下代码创建: 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创建,表示无能为力..
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~
如果想检查,select * from dba_procedures where product_name='...'创建完了默认就编译了一次。或许你动态创建的是错误的。要不,你在plsql环境中编译一次,看看错误。实在不行,动态创建完了还可以动态编译一次。动态执行 alter procedure p_doexec compile;
--用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';
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;
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~