0

node-oracledb で次のクエリを実行すると、次のエラーが発生します。

SELECT OBJECT_NAME
FROM ALL_OBJECTS || '@' || :db
WHERE OWNER = :schema
    AND (
        OBJECT_TYPE = ''TABLE''
        OR OBJECT_TYPE = ''VIEW''
        OR OBJECT_TYPE = ''SYNONYM''
    )
ORDER BY OBJECT_NAME

このクエリを Oracle コンソールで実行すると (もちろん、プレースホルダーを実際の値に置き換えます)、正常に実行されます。ただし、Node アプリケーションでこれを実行すると、次のエラーが発生します。

"ORA-00933: SQL command not properly ended"

このエラーが発生する理由を教えてくれる人はいますか? プレースホルダーに意図した値が確実に入力されていることを確認できます。

ありがとう!

編集:

私がやろうとしても:

SELECT OBJECT_NAME
FROM ALL_OBJECTS || @ || :db

それでも同じエラーが発生します。

4

2 に答える 2

0

これを整理することができました。変数バインディングがどのように機能するかについての私の誤解でした。クエリで必要なものにバインドできると思いました。できないことがわかりました:P

クエリを次のように変更しました。

SELECT OBJECT_NAME
FROM ALL_OBJECTS@<HARDCODED DB NAME HERE>
WHERE OWNER = :schema
AND (
    OBJECT_TYPE = 'TABLE'
    OR OBJECT_TYPE = 'VIEW'
    OR OBJECT_TYPE = 'SYNONYM'
)
ORDER BY OBJECT_NAME;

そして、それはすべて完璧に機能しました!

于 2015-11-16T23:23:43.070 に答える