--select d from B where e =? 你的e=?这个是变量还是写死了? --如果是变量的话应该是没问题的 --下面的测试 scott@YPCOST> insert into dept values(&deptno,'&dname',(select ename from emp where empno=&empno)); 输入 deptno 的值: 22 输入 dname 的值: dfsd 输入 empno 的值: 7788 原值 1: insert into dept values(&deptno,'&dname',(select ename from emp where empno=&empno)) 新值 1: insert into dept values(22,'dfsd',(select ename from emp where empno=7788))已创建 1 行。scott@YPCOST> commit;提交完成。 scott@YPCOST> insert into dept values(&deptno,'&dname',(select ename from emp where empno=&empno)); 输入 deptno 的值: 32 输入 dname 的值: tom 输入 empno 的值: 7369 原值 1: insert into dept values(&deptno,'&dname',(select ename from emp where empno=&empno)) 新值 1: insert into dept values(32,'tom',(select ename from emp where empno=7369))已创建 1 行。scott@YPCOST> commit;提交完成。 scott@YPCOST> select * from dept; DEPTNO DNAME LOC ---------- -------------- ------------- 90 dfd dfd 60 suzhou we 70 suzhou 50 NANCHANG 10 ACCOUNTING NEW YORK 22 dfsd SCOTT 32 tom SMITH 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON已选择10行。--这两个就是测试结果 22 dfsd SCOTT 32 tom SMITH
where e =? 是否传人参数总是一个值
select d from B where e =? 你的e=?这个是变量还是写死了? ---这个是变量。没看出你举例中有含批量操作的
create table TMP_TABLE_A_201012 ( A VARCHAR2(32), B VARCHAR2(32), C VARCHAR2(32) );create table TMP_TABLE_B_201012 ( D VARCHAR2(32), E VARCHAR2(32) );INSERT INTO TMP_TABLE_B_201012 VALUES('D1','E1'); INSERT INTO TMP_TABLE_B_201012 VALUES('D2','E2'); INSERT INTO TMP_TABLE_B_201012 VALUES('D3','E3');INSERT INTO TMP_TABLE_A_201012 VALUES('A1','B1',(SELECT T.D FROM TMP_TABLE_B_201012 T WHERE T.E = 'E1'));
select d from B where e =? 你的e=?这个是变量还是写死了? ---这个是变量。没看出你举例中有含批量操作的
--select d from B where e =? 你的e=?这个是变量还是写死了?
--如果是变量的话应该是没问题的
--下面的测试
scott@YPCOST> insert into dept values(&deptno,'&dname',(select ename from emp where empno=&empno));
输入 deptno 的值: 22
输入 dname 的值: dfsd
输入 empno 的值: 7788
原值 1: insert into dept values(&deptno,'&dname',(select ename from emp where empno=&empno))
新值 1: insert into dept values(22,'dfsd',(select ename from emp where empno=7788))已创建 1 行。scott@YPCOST> commit;提交完成。
scott@YPCOST> insert into dept values(&deptno,'&dname',(select ename from emp where empno=&empno));
输入 deptno 的值: 32
输入 dname 的值: tom
输入 empno 的值: 7369
原值 1: insert into dept values(&deptno,'&dname',(select ename from emp where empno=&empno))
新值 1: insert into dept values(32,'tom',(select ename from emp where empno=7369))已创建 1 行。scott@YPCOST> commit;提交完成。
scott@YPCOST> select * from dept; DEPTNO DNAME LOC
---------- -------------- -------------
90 dfd dfd
60 suzhou we
70 suzhou
50 NANCHANG
10 ACCOUNTING NEW YORK
22 dfsd SCOTT
32 tom SMITH
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON已选择10行。--这两个就是测试结果
22 dfsd SCOTT
32 tom SMITH
---这个是变量。没看出你举例中有含批量操作的
--这样
insert into A(a,b,c) select 参数1,参数2,d from B where e =参数
package test;import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;public class BatchInsertTest
{
protected Connection test()
{
try
{
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url = "jdbc:oracle:thin:@XXX";
Properties sysProps = System.getProperties();
sysProps.put("user", "XXX");
sysProps.put("password", "XXX"); String sql = "INSERT INTO TMP_TABLE_A_201012 VALUES('Ax','Bx',(SELECT T.D FROM TMP_TABLE_B_201012 T WHERE T.E = ?))";
Connection con = DriverManager.getConnection(url, sysProps);
PreparedStatement ps = con.prepareStatement(sql);
int rowCount = 0;
do
{
rowCount++;
ps.setString(1, "E" + rowCount);
System.out.println("E" + rowCount);
ps.addBatch(); if (rowCount > 0 && rowCount % 4 == 0)
{
ps.executeBatch();
}
} while (rowCount < 4); ps.executeBatch();
return null; }
catch (ClassNotFoundException e)
{
e.printStackTrace();
}
catch (SQLException e)
{
e.printStackTrace();
}
catch (InstantiationException e)
{
e.printStackTrace();
}
catch (IllegalAccessException e)
{
e.printStackTrace();
}
return null;
} public static void main(String[] args)
{
new BatchInsertTest().test();
}
}
create table TMP_TABLE_A_201012
(
A VARCHAR2(32),
B VARCHAR2(32),
C VARCHAR2(32)
);create table TMP_TABLE_B_201012
(
D VARCHAR2(32),
E VARCHAR2(32)
);INSERT INTO TMP_TABLE_B_201012 VALUES('D1','E1');
INSERT INTO TMP_TABLE_B_201012 VALUES('D2','E2');
INSERT INTO TMP_TABLE_B_201012 VALUES('D3','E3');INSERT INTO TMP_TABLE_A_201012 VALUES('A1','B1',(SELECT T.D FROM TMP_TABLE_B_201012 T WHERE T.E = 'E1'));
---这个是变量。没看出你举例中有含批量操作的