簡體   English   中英

pl sql忽略if語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM