在IN子句中使用Oracle表类型 – 编译失败

前端之家收集整理的这篇文章主要介绍了在IN子句中使用Oracle表类型 – 编译失败前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
只需尝试为我指定的ID获取光标.
  1. CREATE OR REPLACE PACKAGE some_package AS
  2.  
  3. TYPE t_cursor IS REF CURSOR;
  4. TYPE t_id_table IS TABLE OF NVARCHAR(38) INDEX BY PLS_INTEGER;
  5.  
  6. PROCEDURE someentity_select(
  7. p_ids IN t_id_table,p_results OUT t_cursor);
  8.  
  9. END;
  10.  
  11. CREATE OR REPLACE PACKAGE BODY some_package AS
  12.  
  13. PROCEDURE someentity_select(
  14. p_ids IN t_guid_table,p_results OUT t_cursor)
  15. IS
  16. BEGIN
  17.  
  18. OPEN p_results FOR
  19. SELECT *
  20. FROM someschema.someentity
  21. WHERE id IN (SELECT column_value FROM TABLE(p_ids)); - fails here
  22.  
  23. END;
  24.  
  25. END;

注意:someschema.someentity.id是一个NVARCHAR2(38)

PL / sql:ORA-00382:表达式类型错误
PL / sql:ORA-22905:无法访问非嵌套表项的行

我哪里错了?

在12.2之前的Oracle版本中,您只能通过CREATE TYPE语句从数据库中定义的集合类型中进行SELECT,而不是关联数组:
  1. CREATE TYPE t_id_table IS TABLE OF NVARCHAR(38);
  2.  
  3. CREATE OR REPLACE PACKAGE some_package AS
  4.  
  5. PROCEDURE someentity_select(
  6. p_ids IN t_guid_table,p_results OUT SYS_REFCURSOR);
  7.  
  8. END;
  9.  
  10. CREATE OR REPLACE PACKAGE BODY some_package AS
  11.  
  12. PROCEDURE someentity_select(
  13. p_ids IN t_guid_table,p_results OUT SYS_REFCURSOR)
  14. IS
  15. BEGIN
  16.  
  17. OPEN p_results FOR
  18. SELECT *
  19. FROM someschema.someentity
  20. WHERE id IN (SELECT column_value FROM TABLE(p_ids));
  21.  
  22. END;
  23.  
  24. END;

猜你在找的Oracle相关文章