场景 程序有x条语句 update. .......... where.........
想以数组参数传入数据库,在数据库中循环数组 执行动态SQL
想以数组参数传入数据库,在数据库中循环数组 执行动态SQL
解决方案 »
- windows下 安装后的 Oracle SQL Developer 不能用,出现一个对话框提示:Enter the full pathname for jav
- oracle ORA-02287: 此处不允许序号 的问题
- 同一台服务器上装有两个ORACLE数据库实例,通过命令启停数据库,如何区分操作的是哪个数据库实例
- PL/SQL创建表问题
- catalog疑問
- 在PLSQL Developer中用关联查询,找不到想要的资料,请高人帮忙看看
- 来帮忙解决一下我的Oracle安装问题~!30分
- 只选一条(比如第一条)的sql语句是什么?
- ORACEL安装问题!winxp下!在线等!
- Oracle 11G alert_orcl.log中的有以下报警信息 有啥影响? 如何解决?
- ora怎么删除特定条数的记录?
- 如何优化 IN
我是.net开发着给你个底层方法/// <summary>
/// 执行多条SQL语句,实现数据库事务。
/// </summary>
/// <param name="SQLStringList">多条SQL语句</param>
public static void ExecuteSqlTran(ArrayList SQLStringList)
{
using (OracleConnection connection = new OracleConnection(connectionString))
{
connection.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = connection;
OracleTransaction tx = connection.BeginTransaction();
cmd.Transaction = tx;
try
{
for (int n = 0; n < SQLStringList.Count; n++)
{
string strsql = SQLStringList[n].ToString();
if (strsql.Trim().Length > 1)
{
cmd.CommandText = strsql;
cmd.ExecuteNonQuery();
}
}
tx.Commit();
}
catch (System.Data.OracleClient.OracleException E)
{
tx.Rollback();
throw new Exception(E.Message);
}
finally
{
cmd.Dispose();
connection.Close(); System.GC.Collect();
}
}
}
CREATE TABLE FOO(
FOO NUMBER(10)
);
--搞几条数据
BEGIN
FOR I IN 1..10 LOOP
INSERT INTO FOO VALUES(I);
END LOOP;
END;
/--过程 主要是数组和更新
DECLARE
TYPE T_ARRAY IS ARRAY(10) OF INTEGER;
NUM_ARRAY T_ARRAY :=T_ARRAY(10,20);
BEGIN
FOR I IN 1 .. 2 LOOP
UPDATE FOO SET FOO.FOO = NUM_ARRAY(I);
END LOOP;
END;
--结果应该都为20
如果是任意SQL,可以考虑写个动态执行SQL的过程 (使用 execute immediate 'SQL';),将要执行的SQL通过长字符串,或者临时表的方式传递给过程