当前位置: 首页 > 面试题库 >

ORA-00904:'ood':无效的标识符ORA-06512

华泳
2023-03-14
问题内容

1.在将row_val变量char值’Good’更新到表中时,得到无效的标识符错误2.在插入数字时,它工作正常,但字符串却出现错误3。

declare
    count_temp number;
    csv_data varchar2(1000);
    val varchar2(100);
    row_val varchar2(100);
    sqlcmd varchar2(3000);
    col_name varchar2(100);
    col_data varchar2(100);
begin
    csv_data:='good,son,r,,happy';
    col_data:='varchar2(100)';
    select regexp_count(csv_data, ',') + 1 into count_temp from dual;
    dbms_output.put_line(count_temp);
  sqlcmd := 'create table test(id number GENERATED ALWAYS as IDENTITY(START with 1 INCREMENT by 1))';
    DBMS_OUTPUT.PUT_LINE(sqlcmd);
    execute immediate sqlcmd;
    for i in 1..count_temp loop
        col_name:='column_'||''||i;

        sqlcmd := 'alter table test add '||col_name||' '||col_data;  
            DBMS_OUTPUT.PUT_LINE(sqlcmd);
            execute immediate sqlcmd;


     sqlcmd:='insert into test ('||col_name||') values('||i||')';

     DBMS_OUTPUT.PUT_LINE(sqlcmd);
      execute immediate sqlcmd;
    sqlcmd:='update test  set '||col_name||'='||i||' where id=1';    
   DBMS_OUTPUT.PUT_LINE(sqlcmd);
   execute immediate sqlcmd;
    sqlcmd:='delete from test   where id > 1';    
    DBMS_OUTPUT.PUT_LINE(sqlcmd);
      execute immediate sqlcmd;
    end loop;
    for i in 1..count_temp
     loop
        col_name:='column_'||''||i;
        select regexp_substr(csv_data, '(.*?)(,|$)',1,i, NULL, 1) into val from dual;
        row_val:=val;
      --in this update statement getting errors    
        sqlcmd:='update test  set '||col_name||'='||to_char(row_val)||' where id=1';    
       -- DBMS_OUTPUT.PUT_LINE(sqlcmd);
        execute immediate sqlcmd;

        DBMS_OUTPUT.put(val||'  ');

     end loop;
    dbms_output.new_line;
end;
/

错误

ORA-00904:“良好”:标识符无效ORA-06512:在第43行ORA-06512:在“ SYS.DBMS_SQL”在第1721行

我想将此’good,son,r ,, happy’字符串中的每个单词插入一行中的单独列中


问题答案:

字符串必须用单引号引起来。

所以你需要改变

values('||i||')

values('''||i||''')

如果有的话,还需要在代码的其他位置执行相同的操作。

请注意,字符串中的两个单引号将转换为单引号。



 类似资料:
  • 问题内容: 我尝试使用Oracle数据库编写以下内部联接查询: 这给出了以下错误: 一个表的DDL为: 问题答案: 您的问题是那些有害的双引号。 Oracle SQL允许我们忽略数据库对象名称的大小写,只要我们创建它们时都使用大写的名称,或者不使用双引号即可。如果我们在脚本中使用大小写混合或小写并且将标识符括在双引号中,则当我们引用对象或其属性时,我们都被要求使用双引号和精确的大小写: tl; d

  • ORA-00904:“strdef”:无效标识符 > Oracle数据库版本为: Oracle Database 11g Enterprise Edition版本11.2.0.4.0-64位Production PL/SQL版本11.2.0.4.0-Production“Core 11.2.0.4.0 Production”TNS for Linux:版本11.2.0.4.0-Production

  • 我得到这个错误,而在Oracle数据库中执行查询: ORA-00904:“STRDEF”:无效标识符 > Oracle Database 11g Enterprise Edition 11.2.0.4.0版-64位生产PL/SQL 11.2.0.4.0版-生产“CORE 11.2.0.4.0生产”Linux版TNS:11.2.0.4.0版-生产NLSRTL 11.2.0.4.0版-生产 STRDE

  • 在PL/SQL中执行以下查询时,我得到ORA-00904:“\d$”:无效标识符错误。 我也尝试使用单引号,但仍然面临同样的错误。 有人能帮我解决这个问题吗

  • Oracle 11g Express Edition..创建表时出错 ORA-00904:无效标识符

  • 我已经在虚拟XP中安装了Oracle 10g,并使用 并且成功地创建了表。但是当我试图通过简单的查询获取值时,如 我得到的错误就像 ORA-00904:"bbb":无效标识符 我不能理解我在这里做错了什么。