スカラー日付を返す「F_SMART_DATE()」という名前のOracle 10g関数があります。これは、日付文字列(たとえば '2011-01-01'、 '3/29/1966')または 'スマート'日付(たとえば 'm-1'(1か月前))、 yb-0 '(今年の初め))。私はSQL Developerの機能を実行するとCrystalレポートのコマンドパラメータをOracle関数に渡します。
は、それが期待どおりに動作:
--return 28-JUL-11
SELECT F_SMART_DATE('M-1') SMART_DATE FROM DUAL;
私は同じ構文を使用して、CommandオブジェクトとCrystalレポートを作成する場合は、期待どおりに動作します。
Commandオブジェクト(「AS_OF」という名前)にStringパラメータを作成して関数に渡すと、問題が発生します。
Commandオブジェクトのテキスト:
--reference Oracle function
SELECT F_SMART_DATE({?AS_OF}) SMART_DATE FROM DUAL;
私は、(単一引用符)M-1を渡すと、私は、読み込みエラーが出ます:「データベースからのデータの取得に失敗しました。詳細:ORA-00904: "M":無効な識別子[Database Vendor Code:904] '。
「M-1」(一重引用符)を渡すと、呼び出しは正常に動作します。
残念ながら、これらの構文変異体はどちらか動作しません。理想的には
SELECT F_SMART_DATE(''' || {?AS_OF} || ''') SMART_DATE FROM DUAL;
SELECT F_SMART_DATE(''({?AS_OF})'') SMART_DATE FROM DUAL;
を、私はパラメータダイアログから引用符を削除することができるだろう。
私はコメントを投稿してから数分後に同じ解決策を見つけました。 – craig
とし、渡すパラメータの型がDate(varchar2ではなく)であると仮定すると、sqlは同じか、SELECT F_SMART_DATE({?AS_OF_DATE})SMART_DATE FROM DUALに変更されます。 –