我正在做一个程序。叫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;
我的问题是有哪种方法可以传递主键的值并输入过程?
答案 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