0

http://docs.oracle.com/cd/B14117_01/appdev.101/b10779/oci05bnd.htm#422771

OCI 中的 PL/SQL REF CURSOR 和嵌套表部分

表示为 dty 参数传递了 SQLT_RSET。

如果我使用 SQLT_RSET 作为返回表的函数的返回值,并为 OCI 参数数据指针传递语句句柄的地址,我预计语句句柄将作为执行我可以进一步执行的函数的结果而被实例化fetch,类似于游标。但它会抛出异常 PLS-00382:表达式类型错误 ORA-06550:第 2 行,第 3 列。上述文档是否错误?

从 OCI 头文件中,我看到对于 varray 和嵌套表,它提到使用 SQLT_NCO。我在 OCI 文档中找不到关于在使用 SQLT_NCO 时如何传递或接收嵌套值作为返回值的示例。

在我开枪之前请帮忙。

4

1 回答 1

0

如果您仔细检查示例,您可以看到嵌套表与cursor()函数一起使用。例如

static const text *nst_tab = (text *)
       "SELECT last_name, CURSOR(SELECT department_name, location_id \
        FROM  departments)  FROM employees WHERE last_name = 'FORD'";

您问题的关键部分是

CURSOR(SELECT department_name, location_id FROM  departments)

departments嵌套表在哪里。
因此,如果您需要使用嵌套表作为游标,您需要select从中转换为游标类型。

在 PL/SQL 集合变量的情况下,如果她的记录类型在数据库模式级别上定义,您可以将其转换为表,然后从中选择以获取游标:

declare
  vMyTable TMyTableType;
  vCursor  sys_refcursor;
begin
  -- populate table with values ...

  open vCursor for (
    select * from table(vMyTable);
  );

  :OutCursorParameter := vCursor;
end;
于 2013-09-16T10:04:50.443 回答