0

Oracleデータベースのデータベーステーブルの所有者とユーザーに別々のユーザーがいるデータベース設定があります。これは、実際には、各クエリのプレフィックスが次のようになることを意味します:ownername.tablename

これは、SlickのSQLInterpolation.sql関数ですべてを静的に記述した場合に問題なく機能します。

(sql"select foo_owner.foo_sequence.nextval from dual").as[Long].first()

問題は、所有者のプレフィックスがテスト/製品に応じて変わることです。環境。私がしたいのはこれです:

(sql"select $owner.foo_sequence.nextval from dual").as[Long].first()

ただし、SQL補間は機能しません。Oracleのエラーが発生します。

An exception or error caused a run to abort: ORA-22806: not an object or REF 

助言がありますか?もちろん、より詳細なStaticQueryにフォールバックすることもできますが、sql/sqlu補間を使用するとはるかにコンパクトになります。

4

2 に答える 2

3

$fooinserts foo をバインド変数として使用します。#リテラルを挿入するには、プレフィックスを付ける必要があります。

(sql"select #$owner.foo_sequence.nextval from dual").as[Long].first()
于 2013-02-20T12:52:26.120 に答える
0

プレフィックスの削除は許容されますか? コードで実行できます
ALTER SESSION SET CURRENT_SCHEMA=yourOwner

。この方法では、SQL のプレフィックスを付ける必要はありません。所有者のスキーマで実行しようとするため、CREATE TABLE やその他の DML がないことを確認してください。

于 2013-02-20T12:42:19.387 に答える