Oracle - 了解'使用'关键字......?

时间:2010-07-29 20:50:32

标签: oracle cursor oracle11g

我正在尝试使用像....这样的选择语句打开REF CURSOR。

OPEN myREF FOR SELECT * FROM MYTABLE WHERE MYID IN (:Values) USING myPassedInValList;

但这仅在myPassedInValList中只有一个ID时才有效。我正在尝试使用像'1','2','5'等列表......

有人可以告诉我为什么这不起作用。

我尝试使用Google,但“使用”是一个非常常见的词:(

2 个答案:

答案 0 :(得分:3)

你不能在SQL中使用用户定义的类型(可能是myPassedInValList是varray或嵌套表?)。为了引用UDT中的值,您需要使用table函数,如下所示:

OPEN myREF 
     FOR SELECT * 
         FROM MYTABLE 
         WHERE MYID IN (select * from table(:Values)) 
     USING myPassedInValList;

table函数会将数组转换为内存中的表格式对象,允许您在SQL中访问它的内容。

这仅在您的UDT被定义为数据库对象(CREATE TYPE...)时才有效。如果它在您的包中定义,则SQL将无法看到该定义。

答案 1 :(得分:1)

据我所知,这是不可能的。您可以尝试使用动态SQL来解决它:将字符串OPEN myREF FOR SELECT * FROM MYTABLE WHERE MYID IN (连接到实际值列表,然后打开游标。

http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/dynamic.htm#i13057

/*you could build this string dynamically by looking through myPassedInValList and
concatenating them in the IN list.*/
v_stmt_str := 'SELECT * FROM MYTABLE WHERE MYID IN (''1'',''2'')'

/*Open cursor & specify bind argument in USING clause:*/
OPEN v_emp_cursor FOR v_stmt_str;
相关问题