as
v_d1 date;
v_d2 date;
str varchar2(500);
v_d1:=trunc(sysdate)-30;
v_d2:=trunc(sysdate);
str:= 'CREATE TABLE table1 as Select USER_NO,Max(join_date) join_date from xxx aa where aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO ';
execute immediate str;
end aaa;
为什么总报错,ORA-00933: SQL 命令未正确结束
ORA-06512: 在 "aaa", line 12
ORA-06512: 在 line 1
动态SQL变量不能这样引用吗?本人菜鸟,求高手解答!!
6 个解决方案
#1
str varchar2(500);
--变量定义完后 ,后面开始
begin
--变量定义完后 ,后面开始
begin
#2
加上 begin 就不会报错了!
#3
不好意思,我没粘全,本来有begin,没有就不会编译通过了吧。主要是ORA-00933: SQL 命令未正确结束,还是动态SQL的问题啊
#4
create or replace procedure aaa Authid Current_User
as
v_d1 date;
v_d2 date;
str varchar2(500);
begin
v_d1:=trunc(sysdate)-30;
v_d2:=trunc(sysdate);
str:= 'CREATE TABLE table1 as Select USER_NO,Max(join_date) join_date from xxx@db_link aa where aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO ';
execute immediate str;
end aaa;
就是这个,报错ORA-00933: SQL 命令未正确结束
ORA-06512: 在 "aaa", line 43
ORA-06512: 在 line 1
到底什么原因呢,是这个Select USER_NO,Max(join_date) join_date from xxx@db_link的问题吗,
是动态SQL中不能使用@db_link还是什么问题?高手解答下
as
v_d1 date;
v_d2 date;
str varchar2(500);
begin
v_d1:=trunc(sysdate)-30;
v_d2:=trunc(sysdate);
str:= 'CREATE TABLE table1 as Select USER_NO,Max(join_date) join_date from xxx@db_link aa where aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO ';
execute immediate str;
end aaa;
就是这个,报错ORA-00933: SQL 命令未正确结束
ORA-06512: 在 "aaa", line 43
ORA-06512: 在 line 1
到底什么原因呢,是这个Select USER_NO,Max(join_date) join_date from xxx@db_link的问题吗,
是动态SQL中不能使用@db_link还是什么问题?高手解答下
#5
如果编译通过了,在执行的时候报错的话,你可以先把str输出出来,看看他到底是什么语句,然后再在sqlplus里面执行看看能否执行通过
#6
问题已经解决了,还是引用变量问题
aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO '
不能用单引号,aa.JOIN_DATE>='''||v_d1||''' And aa.JOIN_DATE<'''||v_d2||''' group by USER_NO ' 改成这样就好了。
aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO '
不能用单引号,aa.JOIN_DATE>='''||v_d1||''' And aa.JOIN_DATE<'''||v_d2||''' group by USER_NO ' 改成这样就好了。
#1
str varchar2(500);
--变量定义完后 ,后面开始
begin
--变量定义完后 ,后面开始
begin
#2
加上 begin 就不会报错了!
#3
不好意思,我没粘全,本来有begin,没有就不会编译通过了吧。主要是ORA-00933: SQL 命令未正确结束,还是动态SQL的问题啊
#4
create or replace procedure aaa Authid Current_User
as
v_d1 date;
v_d2 date;
str varchar2(500);
begin
v_d1:=trunc(sysdate)-30;
v_d2:=trunc(sysdate);
str:= 'CREATE TABLE table1 as Select USER_NO,Max(join_date) join_date from xxx@db_link aa where aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO ';
execute immediate str;
end aaa;
就是这个,报错ORA-00933: SQL 命令未正确结束
ORA-06512: 在 "aaa", line 43
ORA-06512: 在 line 1
到底什么原因呢,是这个Select USER_NO,Max(join_date) join_date from xxx@db_link的问题吗,
是动态SQL中不能使用@db_link还是什么问题?高手解答下
as
v_d1 date;
v_d2 date;
str varchar2(500);
begin
v_d1:=trunc(sysdate)-30;
v_d2:=trunc(sysdate);
str:= 'CREATE TABLE table1 as Select USER_NO,Max(join_date) join_date from xxx@db_link aa where aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO ';
execute immediate str;
end aaa;
就是这个,报错ORA-00933: SQL 命令未正确结束
ORA-06512: 在 "aaa", line 43
ORA-06512: 在 line 1
到底什么原因呢,是这个Select USER_NO,Max(join_date) join_date from xxx@db_link的问题吗,
是动态SQL中不能使用@db_link还是什么问题?高手解答下
#5
如果编译通过了,在执行的时候报错的话,你可以先把str输出出来,看看他到底是什么语句,然后再在sqlplus里面执行看看能否执行通过
#6
问题已经解决了,还是引用变量问题
aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO '
不能用单引号,aa.JOIN_DATE>='''||v_d1||''' And aa.JOIN_DATE<'''||v_d2||''' group by USER_NO ' 改成这样就好了。
aa.JOIN_DATE>='||v_d1||' And aa.JOIN_DATE<'||v_d2||' group by USER_NO '
不能用单引号,aa.JOIN_DATE>='''||v_d1||''' And aa.JOIN_DATE<'''||v_d2||''' group by USER_NO ' 改成这样就好了。