# 第123章 SQL函数 SEARCH_INDEX 从索引的 `Find()` 方法返回一组值的函数。 # 大纲 ```java SEARCH_INDEX([[schema_name.]table-name.]index-name[,findparam[,...]) ``` # 参数 - `table-name` - 可选 — 为其定义了 `index-name` 的现有表的名称。不能是一个视图。表的 `schema_name` 是可选的。如果省略,则搜索 `FROM` 子句中指定的所有表。 - `index-name` - 要搜索的索引。现有索引的索引映射的 `SqlName`。 - `findparam` - 可选 — 要传递给索引的 `Find()` 方法的参数或逗号分隔的参数列表。 # 描述 `SEARCH_INDEX` 调用 `index-nameFind()` 方法并返回一组值。可以选择将参数传递给此 `Find()` 方法。例如,`SEARCH_INDEX(Sample.Person.NameIDX)` 调用 `Sample.Person.NameIDXFind()` 方法。 `SEARCH_INDEX` 可以与 `WHERE` 子句中的 `%FIND` 谓词一起使用,以提供对象的 `oref`,该对象提供封装一组值的抽象表示。这些值通常是查询运行时调用的方法返回的行 `ID`。 `SEARCH_INDEX` 调用索引的 `Find()` 方法来返回这个 `oref`。此用法显示在以下示例中: ```sql SELECT Name FROM Sample.Person AS P WHERE P.Name %FIND SEARCH_INDEX(Sample.Person.NameIDX) ``` 该索引必须在 `SQL` 语句引用的表中找到。如果 `SQL` 语句使用的表中不存在指定的索引名称,则会生成 `SQLCODE -151` 错误。如果指定的索引名不是完全限定的,则会生成 `SQLCODE -152` 错误,因此在 `SQL` 语句使用的表中不明确(可能引用多个现有索引)。 如果索引存在,但没有对应的 `Find()` 方法,则生成运行时 `SQLCODE -149` 错误`“SQL 函数遇到错误”`,错误为 `&`。