OCI doc说Cursor和Nested表具有相同的绑定类型SQLT_RSET,但它们没有

时间:2013-09-15 21:08:04

标签: oracle plsql nested-table

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

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

表示为dty参数传递了SQLT_RSET。

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

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

在我开枪之前请帮忙。

1 个答案:

答案 0 :(得分: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;