to superall:
我在sql*plus用相同的用户名执行没有问题

解决方案 »

  1.   

    declare
    v_cursorid number;
    v_createstring varchar2(400);
    v_numrows integer;
    begin
        --建表
    v_cursorid:=dbms_sql.open_cursor;
    v_createstring:='CREATE TABLE DRCOM.TBL'¦¦to_char(sysdate,'HH24:MI:SS');
    v_createstring:=v_createstring¦¦'VISITLOG (FLDID NUMBER(10, 0))';
    dbms_sql.parse(v_cursorid,v_createstring,dbms_sql.v7);
    v_numrows:=dbms_sql.execute(v_cursorid);
      exception
        when others then
        dbms_sql.close_cursor(v_cursorid);        
    end;
    没有问题
      

  2.   

    错了应该是在SQL*PLUS中运行:
    declare
    v_cursorid number;
    v_createstring varchar2(400);
    v_numrows integer;
    begin
        --建表
    v_cursorid:=dbms_sql.open_cursor;
    v_createstring:='CREATE TABLE DRCOM.TBL'||to_char(sysdate,'HH24:MI:SS');
    v_createstring:=v_createstring||'VISITLOG (FLDID NUMBER(10, 0))';
    dbms_sql.parse(v_cursorid,v_createstring,dbms_sql.v7);
    v_numrows:=dbms_sql.execute(v_cursorid);
      exception
        when others then
        dbms_sql.close_cursor(v_cursorid);        
    end;
    没有问题,但运行同样代码的储存过程却报错!!
    急死人了,希望大家多多帮忙!找找错误原因
      

  3.   

    由于‘早期联编’的原因。执行编译的时候,要create 的表不存在,所以编译出错。可以用内置包DBMS_SQL,它允许在运行时刻动态创建SQL语句。试一试吧。
      

  4.   

    to 小马哥
    但我现在就是用DBMS_SQL啊!
      

  5.   

    create or replace table  (加上REPLACE)
      

  6.   

    你的语句快在哪都不能执行!
    因为你的CREATE语句中表的名字中含有':'!试试
    create table a1:1:1 (c1 number)
    就知道了。你扑获了所有异常,而在异常处理中未做任何提示,所以ORACLE提示语句成功执行,而实际上CREATE并未执行。建议:将':'改为'_'(下划线)即可。
    另:你完全可以利用SQLCODE和SQLERRM来发现错误所在。他MD!我的网速怎么这么慢!
      

  7.   

    1.请把错误代码说明。
    2。已创建的表再执行CREATE肯定报错。
    3。表名是否有错?表名中不允许出现时间的冒号,把小时、分、秒分别提取:
    to_char(sysdate,'HH')||'_'||to_char(sysdate,'MM')||' '||to_char(sysdate,'SS')
      

  8.   

    直接将to_char(sysdate,'HH24:MI:SS')改为to_char(sysdate,'HH24_MI_SS')就行了