私はmysqlを研究して以来、oracleのsql開発者にとって非常に新しいです。私はこのウェブサイトで私の質問に対する答えを探しましたが、提供された解決策は本当に理解できません。oracle 10gデータベースに挿入する方法とストアドプロシージャを使用して生成されたIDを返す
私が欲しいのは、javaからデータベースにオブジェクトを挿入した後に生成されたIDを返すことです。 mybatisとoracleの10gデータベースを使用しています。私はすでにテーブルとその列を作成しました。
ここマッパー
<insert id="addUser" parameterType="User" statementType="CALLABLE"> { CALL addUserSP( #{user.surname, javaType=String, jdbcType=VARCHAR, mode=IN}, #{user.firstName, javaType=String, jdbcType=VARCHAR, mode=IN}, #{userId, javaType=Integer, jdbcType=NUMBER, mode=OUT} )} </insert>
ための私のコードは(と私はすでに「CREATEUSER」という名前のパッケージを作成しました)ここに私のストアドプロシージャだのです
PROCEDURE ADDUSERSP
(surname IN VARCHAR2,
firstName IN VARCHAR2,
userId OUT NUMBER
) AS
BEGIN
INSERT INTO users("surname", "first_name")
VALUES (surname, firstName);
RETURNING user_id INTO userId;
END ADDUSERSP;
私がした内容によると、ここには、テーブルに新しいデータを追加するたびにuser_idを自動的にインクリメントするトリガー(?)とシーケンス(?)を作成する必要があるようです。しかし、私はそれをどうやって行うのか分かりません。
ここに私の質問があります: 私のストアドプロシージャは正しいですか?コードは不完全ですか?つまり、私はマッパーのパッケージを宣言していないし、それが必要であることを見たことがある(?)、これはこのようなものだ{ CALL [CreateUser].[addUserSP](blah blah...
。シーケンスとトリガーを書き込むか、主キーuser_id
を自動インクリメントする簡単な方法がありますか?また、構文をチェックしてください。構文には多くの問題があります。
ありがとうございました!
が記載されています。そんなにスペンサーにありがとう!私はあなたが言ったことをやろうとします – chiliflavor
私はあなたが手続きと同じスクリプトで提供したコードを書くべきですか?シーケンスやトリガーのフォルダ内にありますか?申し訳ありませんが、私はこれらのものに本当に精通していません! :( – chiliflavor
SEQUENCEとTRIGGERは別々のデータベースオブジェクトです。その特定のトリガーは "users"テーブルに関連付けられています。 "フォルダ"を保持する必要があります。これらのオブジェクトがデータベースに作成されると、クライアントのブラウザはどこにでも表示されます。.sqlファイルに関しては、TRIGGERはテーブルに関連付けられているので、テーブルと同じスクリプトでもテーブル定義の近くに置いておきます。各テーブルに別々のSEQUENCEオブジェクトを使用すると、そのSEQUENCEの.sqlをテーブルとトリガの定義に近づけることができます。 – spencer7593