【发布时间】:2013-09-29 15:23:10
【问题描述】:
我的问题没有得到很好的答案,我知道该怎么做。只有当记录不存在时,您才会将记录插入到表中:
1) 在您的架构上创建或替换函数(这是检查 2 个参数,您可以将其设置为检查任意多个)PL/SQL 非常具体,按照我编写的复制和粘贴应该可以成功编译。需要多次尝试才能使语法正确。此函数检查要写入的表,以及要检查的相应列名是否已经一起存在。
create or replace function Found(
var1 type,
var2 type)
return number
is
numberOfSelectedRows number := 0;
begin
select count(*)
into numberOfSelectedRows
from TABLE
where COLUMN_NAME = var1
and COLUMN_NAME = var2;
return numberOfSelectedRows;
end Found;
2) 编写 java 来执行 pl/sql 函数:这是使用 NetBeans 完成的。单击该按钮时,它将从其他表中加载 FORM 数据,并确定要插入的表中是否已存在该记录。
try {
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
con = DriverManager.getConnection(""+LOGIN.url+"");
String str1 = jTextField_VariableName.getText();
String str2 = jTextField_VariableName.getText();
String q = "insert into TABLE (var1 type, var2 type) VALUES ('"+str1+"', '"+str2+"')" ;
cs = con.prepareCall("{?=call Found(?, ?)}"); // cs = CallableStatement - defined in class CallableStatement cs = null;
cs.setString(2, str1);
cs.setString(3, str2);
cs.registerOutParameter(1, Types.INTEGER);
cs.execute();
if(cs.getInt(1)>= 1)
{
JOptionPane.showMessageDialog(null, " this record already exists");
}
else
{
try{
DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
con = DriverManager.getConnection(""+LOGIN.url+"");
pst = con.prepareStatement(q);
pst.execute();
}catch(SQLException ex) {Logger.getLogger(REGISTER_STUDENT.class.getName()).log(Level.SEVERE, null, ex);}
}
} catch (SQLException ex) {Logger.getLogger(REGISTER_STUDENT.class.getName()).log(Level.SEVERE, null, ex);}
【问题讨论】:
-
你可以看看OracleMERGE声明。