2

Oracle db に移行する mysql db に数百のトリガーがあります。オラクルで同等のものを見つけることができなかったという声明がたくさんあります。

INSERT INTO $some_kind_of_message._BD_TRIGG$ (dummy) VALUES (value);

私はこれをプロシージャと関数でも見ましたが、プロシージャを呼び出すアプリケーションにメッセージを「返す」ようです(私は思います)。私は両方の RDBMS の初心者ですが、Oracle を使用して数か月になります。

oracle の mysql のものを置き換える同等のステートメントはありますか? どうもありがとう。

編集:

これは多くのトリガーの例です。これは、ログインの検証に使用されます。オラクルのトリガー構文についてはよくわかりませんが、それは今の問題ではありません。「ケース」の部分はまだ mysql 構文にあります。mysql や oracle のドキュメントで情報を見つけることができませんでした。これは通常の挿入ではなく、mysql が使用するある種の戻りメッセージであり (それは私が推測することです)、関数やプロシージャでも見られます。オラクルが同じタスクを実行するためにそれを置き換えるにはどうすればよいですか?

CREATE OR REPLACE TRIGGER adduser 
BEFORE INSERT
ON tbl_users
FOR EACH ROW

  DECLARE flag INTEGER;

  begin
  flag := 1;

  /* validate login */
  IF(LENGTH(TRIM(:NEW.login)) < 4) THEN
    flag := -1;
  END IF;

  /* valido clave */
  IF(flag = 1) THEN
    IF(LENGTH(:NEW.clave) < 3) THEN
      flag := -2;
    END IF;
  END IF;
    CASE flag
        WHEN -1 THEN INSERT INTO $login_less_then_4_characters._BD_TRIGG$ (dummy) VALUES ('error');
        WHEN -2 THEN INSERT INTO $pass_less_then_5_characters._BD_TRIGG$ (dummy) VALUES ('error');
        ELSE flag := 0;
    END CASE;
END;
4

2 に答える 2

2

RAISE_APPLICATION_ERROR()関数/手順が必要だと思います。

構文:

raise_application_error(error code, your error message);

例:

raise_application_error(-20001, 'Login must have 4 characters or more');

Oracle カスタム アプリケーションのエラー コードは ~ の間-20000です-20999

詳細はこちら:

Oracle PL/SQL - カスタム SQLERRM でユーザー定義の例外を発生させる

Oracle ドキュメント:リンク

于 2013-02-25T22:29:07.077 に答える
0

私はMySQLの構文に精通していませんが、Oracleでは次のように変換されます

Insert into table_name(column_name) VALUES (value);

ダミーは、関数に渡されるテーブルまたはパラメーターの列です。Oracle の Insert ステートメントでは、プロシージャ、トリガーを使用できません。DML ステートメントで Function() を使用できます。たとえば、SELECT your_function(dummy)...、INSERT your_function(dummy)... と、関数はご存知のように値を返します。

于 2013-02-25T21:02:16.933 に答える