我在存储过程中定义了 M_TABLECOUNT NUMBER;M_EXSQL VARCHAR2(100); M_TABLENAME VARCHAR2(100); --用于存放表名这几个变量,然后
M_EXSQL:='SELECT COUNT(1) into '||M_TABLECOUNT||' from user_tables ut WHERE ut.table_name='||M_TABLENAME;
dbms_output.put_line(M_EXSQL);
EXECUTE immediate M_EXSQL;
执行的时候输出的sql语句格式为:SELECT COUNT(1) into from user_tables ut WHERE ut.table_name=G_GPS_HIS120401
oracle包缺少表达式的错误。
请问应该怎么拼接。
M_EXSQL:='SELECT COUNT(1) into '||M_TABLECOUNT||' from user_tables ut WHERE ut.table_name='||M_TABLENAME;
dbms_output.put_line(M_EXSQL);
EXECUTE immediate M_EXSQL;
执行的时候输出的sql语句格式为:SELECT COUNT(1) into from user_tables ut WHERE ut.table_name=G_GPS_HIS120401
oracle包缺少表达式的错误。
请问应该怎么拼接。
而你现在的结果是“ut.table_name=G_GPS_HIS120401”,真正的表名前后都没有单引号
问题(2)带有INTO的语句不能这样拼到M_EXSQL串里,只能在执行的时候把它INTO到变量里,所以你的语句应该是:
set serveroutput on;
declare
M_TABLECOUNT NUMBER := 0;
M_EXSQL VARCHAR2(100);
M_TABLENAME VARCHAR2(100) := 'G_GPS_HIS120401';
begin
M_EXSQL:='SELECT COUNT(1) from user_tables ut WHERE ut.table_name='''||M_TABLENAME||'''';
dbms_output.put_line(M_EXSQL);
EXECUTE immediate M_EXSQL into M_TABLECOUNT;
dbms_output.put_line(M_TABLECOUNT);
end;这个时候,你再看看M_EXSQL输出的结果。