2014-02-21 65 views
-1

我在做一個過程。稱爲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

主鍵約束防止重複自身。 Уou不需要任何技巧,例如以上(而且他們不會因事務隔離工作) - 只是處理「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 !                  
+0

我們可以聊天嗎?我想問你smoething其他有關我的問題好嗎? – Moudiz

+0

想要使用[this](http://chat.stackoverflow.com/rooms/47999/pl-sql-storage)? –

+0

是的,任何人都可以加入並解釋我的問題bcz它有點複雜 – Moudiz

0

你只是在尋找PK的最新價值? (即:最大)

如果是這樣,你可以做

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

不,不,它可能是隨機數...我正在尋找查詢的價值,我想檢查..瞭解我嗎? – Moudiz

+0

對不起,不,我不知道。你能舉一個真實的例子嗎? – Mike

+0

我的意思是在這裏翻閱流程..有一個聊天系統,無論如何,我會編輯我的問題 – Moudiz

相關問題