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