将sql语句统一写到存储过程中,在vb中执行该存储过程,就能一次统一提交。

解决方案 »

  1.   

    如果说你想写在vb中这么写,由一个
    cn.exec 来执行,肯定是不可以的。
    不过你可以在vb中加入事务,或调用oracle过程
      

  2.   

    To csdnyork(yyp),penitent(只取一瓢)
    请问这个存储过程应该怎样写,怎样在VB中调用?
      

  3.   

    存储过程很简单
    CREATE OR REPLACE PROCEDURE Procdemo AS
    BEGIN
    insert into tab_1(col_1) values(val_1);
    insert into tab_2(col_2) values(val_2);
    commit;
    END Procdemo;
    /
      

  4.   

    我觉得应该可以执行
    INSERT 。;
    INSERT 。;
    应该是可以执行的,你看看你连接ORACLE的方式,是不是微软提供的方式
    另外你这么执行一样不能满足事务的要求,并非一起执行的几句SQL一定在一个事务中
    调用CNN.BEGINTRAN和CNN。COMMITTRAN还是少不了的
      

  5.   

    好象的确不行,我帮你写了段代码,你拿去直接用好了
    你调用这里的ExecuteMulSql函数就能执行带分号的SQL语句了Option Explicit
    Dim cn As New ADODB.Connection
    Private Sub Command1_Click()
    Dim sSql As String
        sSql = "insert into WULKHLXXX (WULKHLXBM,WULKHLXMC) values ('a','a');"
        sSql = sSql & "insert into WULKHLXXX (WULKHLXBM,WULKHLXMC) values ('b','b');"
        sSql = sSql & "insert into WULKHLXXX (WULKHLXBM,WULKHLXMC) values ('c','c');"
        Debug.Print ExecuteMulSql(sSql, cn)
    End SubPrivate Sub Form_Load()
        cn.Open "Provider=OraOLEDB.Oracle.1;Password=erp;Persist Security Info=True;User ID=erp;Data Source=zt"
    End SubPrivate Function ExecuteMulSql(ByVal sSql As String, cnn As ADODB.Connection) As Long
    On Error GoTo Errorhandle
    Dim sArrSql() As String
    Dim i As Long
        sArrSql = Split(sSql, ";")
        For i = 0 To UBound(sArrSql)
            If Trim(sArrSql(i)) <> "" Then
               Debug.Print sArrSql(i)
               cnn.Execute sArrSql(i)
            End If
        Next
        ExecuteMulSql = 1
        Exit Function
    Errorhandle:
        ExecuteMulSql = -1
        Exit Function
    End Function
      

  6.   

    To bzszp(SongZip):
    我希望在VB中写好SQL,再调用存储过程,将SQL作为参数传递,在存储过程中控制事务.请问这样的存储过程应该怎么写?
    To hillhx(曾经的曾经) :
    先谢谢你了,待会儿试一下.
    另:看你的代码,我没发现有COMMIT/ROLLBACK,不知道会不会影响事务
      

  7.   

    在oracle8.1.5以上版本:create or replace procedure p_demo(t_sql varchar2)
    is
    t_s  varchar2(2000);
    begin
    execute immediate t_sql;
    commit;
    end p_demo;
    /
      

  8.   

    我告诉你最easy的办法:
    你直接用下面的语句不行,是吧:
    "insert into tab_1(col_1) values(val_1);insert into tab_2(col_2) values(val_2);"换成这个就OK了。
    "begin" + chr$(13) +
    "insert into tab_1(col_1) values(val_1);insert into tab_2(col_2) values(val_2);" + + chr$(13) +
    "end;"
      

  9.   

    赞同 smalltalk(老徐)  的做法。
    在Delphi,我也是这样做的.
    sql.add('BEGIN');
    sql.add('insert into tab_1 (col_1) values('+val_1_');');
    sql.add('insert into tab_2 (col_2) values('+val_2_');');
    ....
    sql.add('end;')