如何处理pl / sql代码中的单引号

时间:2014-03-25 09:50:49

标签: oracle

执行以下代码时遇到以下错误。 错误报告: ORA-01722:无效的号码 ORA-06512:第12行 01722. 00000 - "无效号码"

请你帮我找出根本原因。

declare
v_str varchar2(100):='XY';
v_cnt number := 1;
v_text varchar2(100);
v_sysdate date := sysdate;
begin
v_text := 'select to_char(' || '''' || v_sysdate || '''' || ',''yyyy/mm/dd'') from dual';
dbms_output.put_line(v_text);
execute immediate v_text into v_str;
dbms_output.put_line(v_str);
end;

2 个答案:

答案 0 :(得分:0)

问题在于您尝试将char转换为char,就好像第一个是日期一样。请注意,您正在执行以下查询:

select to_char('2014-03-14','yyyy/mm/dd') from dual

没有任何意义。 “date”(2014-03-14)实际上是一个字符串,你不能把它当作日期来对待。

如果您只想将v_sysdate转换为varchar2,您可以这样做:

v_str := to_char(v_sysdate,'yyyy/mm/dd');

或者您可能正在研究动态SQL如何工作......

答案 1 :(得分:0)

请大家在回答之前测试一下......执行立即问题..

------所以我认为这就是你想要的......

declare
v_str varchar2(100):='XY';

v_cnt number := 1;

v_text varchar2(100);
v_sysdate date := sysdate; --

begin

v_text := 'select to_char(:x,''yyyy.mm.dd'') from dual';--:x dynamically built sql statement using IN OUT v_variable1, IN v_variable2; 
dbms_output.put_line(v_text);

execute immediate v_text into v_str using in v_sysdate; 

dbms_output.put_line(v_str);
end;

你不能把变量放入执行字符串并期望某些东西;)你需要定义他在那个地方使用... v_sysdate进入定义:x place ...