我正在尝试将ID列表传递给REST api(apex ords)。
我有这样的网址:
https://apex.oracle.com/***/apex/anime_keeper/ak/getAnimeList/:ids
当我这样做时:
https://apex.oracle.com/***/apex/anime_keeper/ak/getAnimeList/1
我得到id为1的项目,但如果我这样做:
https://apex.oracle.com/***/apex/anime_keeper/ak/getAnimeList/1,2,3
我收到500内部服务器错误
我应如何格式化我的网址,以便我可以在顶级ords中使用where id in (ids)
中的1,2,3列表?
这是ords的屏幕截图,如果它可以提供帮助:
答案 0 :(得分:2)
由于ORDS不会将csv值拆分掉,因此SQL无法工作。因此,sql as-is将检查id in ( '1,2,3')
而不是id in ( 1,2,3)
有多种方法可以达到目的。
例如,使用XMLTABLE
SELECT rownum,object_id
FROM user_objects
WHERE rownum IN (
select (column_value).getstringval() csv_values
FROM
xmltable(('"' || REPLACE(:ids, ',', '","')|| '"'))
)
答案 1 :(得分:0)
在网址中,逗号','具有特殊含义/目的。它是在url中分隔查询参数,例如
https://test.me/mypage?firstname=jon,lastname=doe,gender=m
因此,服务器发现500错误,因为它发现损坏或不完整的键/值对。它期望每个逗号后键=值对。为了解决这个问题,我们需要urlencode值,例如
https://apex.oracle.com/***/apex/anime_keeper/ak/getAnimeList/1%2C2%2C3