5

これは非常に単純なので、おそらくすでに質問されていると思いますが、見つかりませんでした(そうである場合は、質問して申し訳ありません)。

テーブルに空の行を挿入して、ExecuteScalar を介してその ID (挿入トリガーによって生成された主キー) を取得できるようにしたいと考えています。データは後でコードに追加されます。

私の質問はこれです:空のレコードを作成するための特定の挿入構文はありますか? または、「INSERT INTO テーブル (すべての列をリストする) 値 (すべての列で null)」などの通常の挿入構文を使用する必要がありますか?

答えてくれてありがとう。

更新: Oracle では、INSERT の ExecuteScalar は 0 のみを返します。最終的な答えは、以下に投稿されたものの組み合わせです。まず、パラメータを宣言し、RETURNING で取得する必要があります。

INSERT INTO TABLENAME (ID) VALUES (DEFAULT) RETURNING ID INTO :parameterName

詳細については、このリンクを確認してください。

4

2 に答える 2

4

すべての列を指定する必要はありませんが、「空の」レコードを作成できない場合があります。テーブルの NOT NULL 制約を確認してください。ない場合 (主キー制約を含まない)、指定する必要がある列は 1 つだけです。このような:

insert into my_table ( some_column )
values ( null );

RETURNING句について知っていますか?INSERT を実行すると、その PK を呼び出し元のアプリケーションに戻すことができます。

insert into my_table ( some_column )
values ( 'blah' ) 
returning my_table_id into <your_variable>;

しかし、私はアプローチに疑問を呈します。空の行を作成する理由 それは、そのテーブルに制約がないことを意味する/可能性があります。良い、クリーンなデータが必要な場合は悪いことです。

于 2013-08-16T19:25:06.613 に答える
3

基本的に、すべての列の値がNULLプライマリ以外の行を挿入するには

insertキー列の値に対して、次の簡単なステートメントを実行できます。

insert into your_table(PK_col_name)
  values(1);                          -- 1 for instance or null

主キー列の移入を担当する before insert トリガーは、

ステートメントのvalues句の値をオーバーライドして、insert

値以外の空のレコードPK

于 2013-08-16T19:23:01.207 に答える