TOADにレコードが存在しないことを確認した後に新しいレコードを挿入するプロシージャがあります。 それが正常に作成されます。Oracle PL/SQLプロシージャは挿入を実行しません。
CREATE OR REPLACE PROCEDURE Set_Mod (
p_TypeID IN NUMBER, p_LinkID IN NUMBER
)
AS
v_isExists NUMBER := 0;
v_query varchar2(200);
BEGIN
SELECT TypeID
INTO v_isExists
FROM myTable
WHERE LinkID = p_LinkID
AND TypeID = p_TypeID;
IF (v_isExists = 0) THEN
v_query := 'INSERT INTO myTable (TypeID, LinkID) VALUES (' || p_TypeID || ',' || p_LinkID || ')';
EXECUTE IMMEDIATE v_query;
END IF;
END;
/
私はこのブロックを使用してプロシージャを実行しようとしています:
BEGIN
Set_Mod(1, 1);
END;
/
私はヒキガエルにこれらのスクリプトの出力を得る:
Procedure created.
PL/SQL procedure successfully completed.
しかし、誰任意の挿入。それは動作しません。 問題はどこですか?
レコードがすでに存在するかどうかを調べ、存在しない場合にのみ行を挿入することが目標です。何が間違っているかを修正する方法については下記の解答を読んでください。同じタイプIDのLinkID値で決して2つの行を入れることができないように、2つの列にUNIQUEキーを組み合わせたキーも考慮してください。 - 次に、重複例外をトラップし、挿入の代わりに更新を行うことができますか? – JasonInVegas