软件交付用户后在使用过程中发现错误或需要更新,如何用程序来更新或修改存储过程?

解决方案 »

  1.   

    你说的存储过程是数据库上运行的?如果是数据库上运行的,用PL/SQL修改就可以了吧。你要通过自己的软件来修改数据库上的存储过程吗?
      

  2.   

    create or replace procedure .....
    ...
      

  3.   

    就像传送一个普通SQL语句那样传送一个修改存储过程的语句就行var
      vSQL: string;
    begin
      vSQL := ' ALTER PROCEDURE Oakland_authors'
            + ' WITH ENCRYPTION '
            + ' AS '
            + ' SELECT au_fname, au_lname, address, city, zip'
            + ' FROM pubs..authors '
            + ' WHERE state = ''CA'''
            + ' ORDER BY au_lname, au_fname';
      with adoquery1 do
      begin
        close;
        sql.Clear;
        sql.text := vSQL;
        ExecSQL;
      end;
    end;
      

  4.   

    下面是我原先做的例子DataBaseName-数据库名
    CreateProcedureQuery-用于存放你最新存储过程的SQL
    ProcedureName-存储过程名
    CreateDateTime-若原时间小于CreateDateTime,则删除原先的存储过程,创建CreateProcedureQuery中最新的存储过程(这样只执行一次)
    procedure TDataMUpdate.ReplaceProcedure(DataBaseName: String;
      CreateProcedureQuery: TQuery; ProcedureName, CreateDateTime: String);
    begin
      QExecSQL.Close;
      QExecSQL.DatabaseName:= DataBaseName;
      QExecSQL.SQL.Text:= 'select * from dbo.sysobjects where id = object_id(N''[dbo].[' +ProcedureName+ ']'') and OBJECTPROPERTY(id, N''IsProcedure'') = 1';
      QExecSQL.Open;
      //没有,则新建
      if QExecSQL.IsEmpty then begin
        CreateProcedureQuery.Close;
        CreateProcedureQuery.DatabaseName:= DataBaseName;
        CreateProcedureQuery.ExecSQL;
      end else
      //创建时间太小,则替换
      if FormatDateTime('YYYY-MM-DD', QExecSQL.FieldByName('crDate').AsDateTime) < CreateDateTime then begin
        QExecSQL.Close;
        QExecSQL.DatabaseName:= DataBaseName;
        QExecSQL.SQL.Text:= 'drop procedure [dbo].['+ProcedureName+']';
        QExecSQL.ExecSQL;
        
        CreateProcedureQuery.Close;
        CreateProcedureQuery.DatabaseName:= DataBaseName;
        CreateProcedureQuery.ExecSQL;    
      end;
    end;ReplaceProcedure('NTs', QJS, 'sP_JS', '2008-04-01');这样,NTs数据库中若不存在sP_JS存储过程,则会创建一个,若已经存在且时间小于'2008-04-01',则将原先的删除,并重创建一个
    那么新的sP_JS的创建肯定大于'2008-04-01',不会出现重复创建问题
    视图可以一样操作
      

  5.   

    楼上的不是sql server的吧?