Oracle Sql 语句忽略字符串文字

Posted

技术标签:

【中文标题】Oracle Sql 语句忽略字符串文字【英文标题】:Oracle Sql Statement to ignore string literals 【发布时间】:2011-11-30 19:47:22 【问题描述】:

我有一个简单的查询,它有一个IN 子句,即

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);

——这行得通。

但问题是当我必须像这样构建字符串时,如何让 Oracle 忽略“'”:

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

select *
  from customer
 where dept_name in (dept_name_list);

这里,dept_name_list 返回错误?

有什么建议吗??

更新:我试图通过执行以下操作来转义单引号: dept_name_list := '''red'', ''blue''';

它编译但没有结果显示。

【问题讨论】:

【参考方案1】:

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

这是一个link,它解释并展示了如何以这种方式使用类型。

【讨论】:

【参考方案2】:
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;

应该这样做

【讨论】:

@sanjeev40084 不能从这里尝试...你能试试更新的代码吗?【参考方案3】:

你可以像这样转义引号:

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

但这对您没有帮助,除非您像这样动态构建 SQL:

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

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

OPEN out_cur FOR v_sql;

【讨论】:

那你怎么执行sql 这取决于你在做什么。您是否尝试遍历结果行?您是否正在打开参考光标?您是否尝试将特定列返回到变量中? 会发生这种情况:OPEN out_cur FOR select ** from customer where dept_name IN .. ok 这次得到了这个错误:ORA-00604: error occurred at recursive SQL level 1 ORA-01003: no statement parsed 听起来你的 SQL 字符串之一是空的。即 OPEN out_cur FOR '';OPEN out_cur FOR 'SELECT * FROM customer WHERE dept_name IN ()'; 在尝试使用之前确保字符串包含有效的 SQL。

以上是关于Oracle Sql 语句忽略字符串文字的主要内容,如果未能解决你的问题,请参考以下文章

Oracle OCP 官方PPT学习日志 使用 SQL SELECT 语句检索数据 01

在Oracle使用sql语句中如何插入日期格式的数据

在oracle中怎样进行忽略大小写的查询

SQL语句编写注意事项

ORA-01704: 字符串文字太长,插入语句SQL中,报这样的错误?怎么解决?

自定义 SQL 函数 - PL/SQL:语句被忽略