[英]pl sql ignores if statement
我是oracle pl / sql環境的新手(坦率地說,我現在認為oracle討厭開發人員),我需要在表中插入一些數據,但前提是該記錄存在於另一個表中,即我有這樣的表
tracks
------
track_id
和
users
-----
user_id
我需要將這些ID插入到“喜歡”的第三個表中,但前提是這些ID已存在於用戶和跟蹤表中,因此我嘗試了類似的方法。
CREATE OR REPLACE PROCEDURE proc_insert_liked(
v_user IN liked.user_id%type,
v_track IN liked.track_id%type)
AS
temp_user users%rowtype;
temp_track tracks%rowtype;
BEGIN
SELECT * INTO temp_user FROM users WHERE user_id = v_user;
SELECT * INTO temp_track FROM tracks WHERE track_id = v_track;
IF (temp_user.user_id < 1) OR (temp_track.track_id < 1) THEN DBMS_OUTPUT.PUT_LINE(' does not exist'); return;
ELSE INSERT INTO liked(user_id, track_id) VALUES (v_user, v_track); DBMS_OUTPUT.PUT_LINE('Success');
END IF;
END proc_insert_liked;
/
BEGIN
proc_insert_liked(333, 33333);
END;
/
這幾乎可以完美地工作,除非它不能工作,似乎完全忽略了這一行
IF (temp_user.user_id < 1) OR (temp_track.track_id < 1) THEN DBMS_OUTPUT.PUT_LINE(' does not exist'); return;
因為如果我確實嘗試插入不存在的id而不是進行檢查並拋出我定義的消息,它只會告訴我沒有數據
0000- "no data found"
如果我插入表中的值,那么我會成功
一定很簡單,但是我似乎找不到問題所在,我們將不勝感激。
這幾乎是其他所有人在說的:
CREATE OR REPLACE PROCEDURE proc_insert_liked(
v_user IN liked.user_id%type,
v_track IN liked.track_id%type)
AS
temp_user users%rowtype;
temp_track tracks%rowtype;
v_user_cnt NUMBER;
v_trck_cnt NUMBER;
BEGIN
SELECT COUNT(*) INTO v_user_cnt FROM users WHERE user_id = v_user;
SELECT COUNT(*) INTO v_trck_cnt FROM tracks WHERE track_id = v_track;
IF (v_user_cnt < 1) OR (v_trck_cnt < 1) THEN
DBMS_OUTPUT.PUT_LINE(' does not exist');
RETURN;
ELSE
INSERT INTO liked
(user_id, track_id
) VALUES
(v_user, v_track
);
DBMS_OUTPUT.PUT_LINE('Success');
END IF;
END proc_insert_liked;
/
BEGIN
proc_insert_liked(333, 33333);
END;
/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.