pl sql忽略if语句

时间:2014-04-09 21:55:06

标签: sql oracle plsql

我是oracle pl / sql环境的新手(坦率地说我现在认为oracle讨厌开发人员)并且我需要将一些数据插入到表中,但只有当该记录存在于另一个表中时,即我有一个像这样的表

tracks
------
track_id

users
-----
user_id

我需要将这些ID插入到第三个表中,并且#34;喜欢",但只有当这些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"

如果我插入表中的值,那么我就获得了成功

它必须是非常简单的东西,但我似乎无法找到问题所在, 任何帮助将非常感谢

1 个答案:

答案 0 :(得分:0)

以下是其他人的意见:

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;
/