我在存储过程中定义了    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包缺少表达式的错误。
请问应该怎么拼接。

解决方案 »

  1.   

    问题(1)这里的M_TABLENAME,在拼接之后,要达到的效果是前后都有单引号,表示是CHAR类型的,
    而你现在的结果是“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输出的结果。