我是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"
如果我插入表中的值,那么我就获得了成功
它必须是非常简单的东西,但我似乎无法找到问题所在, 任何帮助将非常感谢
答案 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;
/