0

Websphere でアプリケーションを実行しています。サーバー上でデータ ソースを構成し、jndi からデータ ソースを取得しました。私はSpring Jdbcを使用しており、いくつかの選択ステートメントは問題なく実行されています。

これで、「toad」内から正常に実行されている挿入ステートメントがありますが、同じ挿入ステートメントがアプリケーションから失敗しています。

java.sql.SQLException: ORA-01400: cannot insert NULL into ("SCHEMA1"."XYZ"."CREATED_BY")

CREATED_BY is a VARCHAR2 (30 Byte) with DEFAULT set to 'SYS_CONTEXT ('USERENV', 'OS_USER')'

注: insert ステートメントで列を指定していません。私の発言は次のようなものです。

Insert into SCHEMA1.XYZ(some_column, another_column, is_active) values ('sadsf','sdfsdfsdf','Y')  

私は jdbcTemplate を使用しているので、基本的には次のことを行っています。

jdbcTemplate.update(theQuery);

次のようにデータソースを構成しています。

<beans:bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
    <beans:property name="jndiName" value="jdbc/MyDatasource" />
</beans:bean>

これは、データ ソースの J2C 認証データである JAAS のセットアップ中に使用されたユーザー名からのものであると予想していました。

すべてのクエリで簡単に自動入力できるすべての監査列を指定したくありません。どんな助けでも大歓迎です。

4

1 に答える 1

2

SYS_CONTEXTから

名前空間の事前定義されたパラメーター
USERENVOS_USERデータベースセッションを開始したクライアントプロセスのオペレーティングシステムユーザー名。

もあります

CLIENT_IDENTIFIERアプリケーションがDBMS_SESSION.SET_IDENTIFIERプロシージャ、OCI属性OCI_ATTR_CLIENT_IDENTIFIER、またはJavaクラスOracle.jdbc.OracleConnection.setClientIdentifierを介して設定した識別子を返します。この属性は、同じデータベースユーザーとして認証される軽量アプリケーションユーザーを識別するために、さまざまなデータベースコンポーネントによって使用されます。

SESSION_USER現在のユーザーが認証されるデータベースユーザー名。この値は、セッションの期間中、同じままです。

私はOracle認証に精通していませんが、おそらく後者の1つがあなたのタスクにより適しています。

于 2013-03-15T14:33:51.487 に答える