将sql语句统一写到存储过程中,在vb中执行该存储过程,就能一次统一提交。
解决方案 »
- sqlldr skip参数遇到的问题!
- oracle的日志能找到之前执行过的sql语句吗?
- 请问如果一直insert而不commit会怎么样?
- “从行变量中提取列值”及“同一个语句用动态SQL执行失败”的问题
- 不同操作系统安装oracle
- sql plus的菜鸟问题
- 请问IBM AIX下安装Oracle9i,创建数据库时,默认的数据库字符集、国家字符集、默认语言、默认日期格式分别是什么?
- oracle如何进行数据迁移?就是用命令行将一台机器的库转移到另一台database server
- 请教个PROC连接数据库的问题
- 关于oracle8i做standby的详细步骤,23号结贴马上给分。
- 为什么我进不了SQL*PLUS???
- 听说java中可以直接写pl/sql语句,具体怎么写?
cn.exec 来执行,肯定是不可以的。
不过你可以在vb中加入事务,或调用oracle过程
请问这个存储过程应该怎样写,怎样在VB中调用?
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;
/
INSERT 。;
INSERT 。;
应该是可以执行的,你看看你连接ORACLE的方式,是不是微软提供的方式
另外你这么执行一样不能满足事务的要求,并非一起执行的几句SQL一定在一个事务中
调用CNN.BEGINTRAN和CNN。COMMITTRAN还是少不了的
你调用这里的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
我希望在VB中写好SQL,再调用存储过程,将SQL作为参数传递,在存储过程中控制事务.请问这样的存储过程应该怎么写?
To hillhx(曾经的曾经) :
先谢谢你了,待会儿试一下.
另:看你的代码,我没发现有COMMIT/ROLLBACK,不知道会不会影响事务
is
t_s varchar2(2000);
begin
execute immediate t_sql;
commit;
end p_demo;
/
你直接用下面的语句不行,是吧:
"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;"
在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;')