我有以下代码:
IF nvl(p_value, 0) >= 0 THEN
l_currency_prefix := 'scc.currency_prefix_pos';
l_currency_suffix := 'scc.currency_suffix_pos';
ELSE
l_currency_prefix := 'scc.currency_prefix_neg';
l_currency_suffix := 'scc.currency_suffix_neg';
END IF;
l_query := 'SELECT nvl('||l_currency_prefix||', '')'
||'trim(to_char('||p_value||
',scc.currency_format
,'||'NLS_NUMERIC_CHARACTERS=' || 'scc.decimal_group_separator'||'))'
||'nvl('||l_currency_suffix||', '')
FROM gss.gss_currency_locale scc
WHERE scc.country_code =' ||p_country_code||
'AND scc.currency_code ='|| p_currency_code||
'AND rownum=1';
这里是l_query的dbms输出:
SELECT nvl(scc.currency_prefix_pos, ')trim(to_char(10000,scc.currency_format
,NLS_NUMERIC_CHARACTERS=scc.decimal_group_separator))nvl(scc.currency_suffix_pos, ')
FROM gss.gss_currency_locale scc
WHERE scc.country_code =USAND scc.currency_code =USDAND rownum=1
但是,它一直显示ORA-00933错误。 我调试这些代码几个小时,无法找到错误的位置。 有人可以就此提出一些建议吗?
先谢谢!
答案 0 :(得分:1)
现在有些问题很明显。你需要这样的东西:
l_query := 'SELECT nvl('||l_currency_prefix||',
||'trim(to_char('||p_value||
',scc.currency_format || ')' ||
FROM gss.gss_currency_locale scc
WHERE scc.country_code = ''' ||p_country_code|| '''' ||
' AND scc.currency_code = '''|| p_currency_code|| '''' ||
' AND rownum=1';
(我不确定这是否100%正确。)
通常,在以这种方式创建查询时,我使用replace()
而不是直接替换。类似的东西:
l_query := 'select nvl(@currency_prefix, trim(@p_value, @currency_format))
from . . . ';
l_query := replace(l_query, '@currency_prefix', l_currency_prefix);
l_query := replace(l_query, '@p_value', p_value);
. . .
我发现这种方法可以更容易地维护代码并查看它在做什么。