0

我正在尝试将 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 内部服务器错误

我应该如何格式化我的 url,以便我可以where id in (ids)在 apex ords 中使用 1、2、3 列表?

如果有帮助,这是 ords 的屏幕截图:

在此处输入图像描述

4

2 回答 2

3

该 SQL 将不起作用,因为 ORDS 不会将 csv 值拆分出来。这样 sql as-is 将检查id in ( '1,2,3')notid 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, ',', '","')|| '"'))
 )

这里还提到了其他方法: 使用 Oracle SQL 中 replace() 函数的输出中带有逗号分隔字符串的“IN”子句

这是一个 ORDS REST API 完全符合您的意图。 在此处输入图像描述

于 2018-05-21T17:14:19.007 回答
0

在 URL 中,逗号 ',' 具有特殊含义/用途。它是在 url 中分隔查询参数,例如

https://test.me/mypage?firstname=jon,lastname=doe,gender=m

因此,服务器在发现损坏或不完整的键/值对时抛出 500 错误。它期望每个逗号之后的 key=value 对。为了解决这个问题,我们需要对值进行 urlencode,例如

https://apex.oracle.com/***/apex/anime_keeper/ak/getAnimeList/1%2C2%2C3
于 2018-05-21T12:34:54.260 回答