sql >> データベース >  >> RDS >> Oracle

ExcelVBAからOraclePLSQL関数を呼び出す

    日付を使った作業は完全に正しくありません。潜在的な場所がいくつかあるため、正確な場所を特定するのは困難です。このコードの何が問題になっているのかを説明します(「89行目」のステートメントから取得):

    ... FP_BASIC_BD."DATE">=TO_CHAR(TRUNC(TO_DATE(GTT_DWM_STATS.CLOSINGDATE,'DD-MON-YY'), 'IW'),'DD-MON-YY') ...
    

    GTT_DWM_STATS.CLOSINGDATE 日付形式があります(DDLステートメントによる)。ただし、to_date 関数は最初のパラメーターとして文字列を取ります。この場所で、Oracleは次のことを行います。

    • 暗黙的に日付を文字列に変換します(セッションの形式を使用)
    • 次にto_date 関数は、文字列を'DD-MON-YY'で記述された日付として扱い、日付に変換し直そうとします。 フォーマット
    • 次にtrunc 日付を切り捨てます
    • 次にto_char 再度文字列に変換し、文字列を日付と比較します(おそらく)FP_BASIC_BD."DATE"
    • ifFP_BASIC_BD."DATE" が日付の場合、Oracleは等号の右側の式の結果を暗黙的に日付に変換します
    • またはFP_BASIC_BD."DATE"の場合 が文字列の場合、Oracleは文字列比較のルールに従って文字列を比較します。

    ここで必要なのは、不要な変換をすべて取り除くことです。

    FP_BASIC_BD."DATE" >= TRUNC(GTT_DWM_STATS.CLOSINGDATE, 'IW')
    

    その後、日付を処理している他のすべてのステートメントを注意深く確認する必要があります。関数が入力パラメーターとして日付を受け取る場合、関数が文字列を受け取る場合は日付を渡す必要があります-文字列を渡します。比較についても同じです。文字列を文字列と比較し、日付を日付と比較します。




    1. mysqlの発行順

    2. PostgreSQLで監視する重要事項-ワークロードの分析

    3. MySQLでのトランザクションの処理

    4. MySQLのアイテムを固定リストで注文しますか?