执行以下代码时遇到以下错误。 错误报告: 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;
答案 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 ...