在执行查询时包括过程中的主键值

时间:2014-02-21 14:09:56

标签: oracle

我正在做一个程序。叫PRC_CHECKING_PROCEDURE。此过程的作用是检查行是否存在。

我有这样的查询:Insert into tab1 ( code, text) ( 1 ,'test')代码是主键。

过程角色是检查上面的查询,这样程序就会这样:

 declare cnt;
 begin
  select count(1) into cnt from tab1  where code = ?? (here is my question how to pass the value)
if count =0 then 
'Insert into tab1 ( code, text) ( 1 ,'test')
end if;
end;

我的问题是有哪种方法可以传递主键的值并输入过程?

2 个答案:

答案 0 :(得分:2)

主键约束可防止重复。 У你不需要像上面那样的任何技巧(而且由于事务隔离它们将无法工作) - 只需处理“dup_val_on_index”异常:

SQL> create table t (code int primary key, text varchar2(10))
  2  /

SQL> set serveroutput on
SQL> begin
  2   insert into t values(1,'test');
  3  exception
  4   when dup_val_on_index then
  5     dbms_output.put_line('Duplicate !');
  6  end;
  7  /

SQL> /

Duplicate !                                                                     

答案 1 :(得分:0)

您是否只是在寻找PK的最新价值? (即:最大的?)

如果是这样,你可以

SELECT COUNT(1) INTO CNT FROM TAB1 WHERE CODE = SELECT MAX(CODE) FROM TAB1