2011-11-30 78 views
1

我有有IN子句一个简单的查询,即的Oracle SQL语句忽略字符串文字

select * 
    from customer 
where dept_name in ('red', 'blue') 

现在我试图把DEPT_NAME到字符串变量是这样的:

dept_name_list := 'red'; 

select * 
    from customer 
where dept_name in (dept_name_list); 

- 这些作品。

但问题是如何才能让甲骨文忽略“'”时,我必须建立这样的字符串:

dept_name_list := ''red', 'blue''; 

select * 
    from customer 
where dept_name in (dept_name_list); 

这里,dept_name_list返回错误?

有什么建议?

更新:我试图做这样的事情逃单引号: dept_name_list := '''red'', ''blue''';

它编译但不显示结果。

回答

3

您可以创建一个表示varchars表的类型,并在您的选择中使用它。

这是一个link,它解释并告诉你如何以这种方式使用类型。

3
DECLARE 
    TYPE tbl_str IS TABLE OF VARCHAR2 (30) index by binary_integer; 
    l_array tbl_str; 

BEGIN 
    l_array(0) := 'Red'; 
    l_array(1) := 'Green'; 
    l_array(2) := 'Blue'; 

    select * 
    from customer 
    where dept_name in TABLE(CAST(l_array AS tbl_str)); 
END; 

应该这样做

+0

得到'PL/SQL:ORA-00936:missing expression'错误... – sanjeev40084

+0

@ sanjeev40084不能尝试从这里...你可以尝试更新的代码吗? –

1

您可以逃脱这样的行情:

dept_name_list := ' ''red'', ''blue'' '; 

但是,这不会帮助你,除非你是动态建立你的SQL是这样的:

v_sql := 'select * ' 
||  'from customer ' 
||  'where dept_name in (' || dept_name_list || ')'; 

然后你可以这样打开你的光标:

OPEN out_cur FOR v_sql; 
+0

你如何执行SQL然后 – sanjeev40084

+0

这取决于你在做什么。你是否想要遍历结果行?你打开参考光标吗?你是否试图将特定列返回给变量? – wweicker

+0

这是发生了什么: OPEN FOR out_cur选择 ** 从客户那里 在DEPT_NAME .. – sanjeev40084