sql - ORA-00904:“好”:无效标识符 ORA-06512
问题描述
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:第 1721 行“SYS.DBMS_SQL”
我想将这个 'good,son,r,,happy' 字符串中的每个单词插入到单行中的单独列中
解决方案
字符串必须用单引号括起来。
所以你需要改变
values('||i||')
到
values('''||i||''')
如果有的话,也需要在代码中的其他地方做同样的事情。
请注意,字符串中的两个单引号将转换为单引号。
推荐阅读
- xamarin - xamarin collectionview 和 listview 绘制速度很慢
- php - 无法从 API 回调访问 post 路由
- c++ - 使用 Windows 10 和 MINGW 编译器在 VS Code 上使用 gdb 调试器进行调试时出错
- typescript - 如何将下拉选择的值作为参数传递给Angular中的api调用?
- hadoop - 在 S3 中使用 hadoop 命令时需要哪些策略
- postgresql - 如何防止 SQL 查询参数/值出现在 Google Cloud PostgreSQL 日志中?
- python - AWS GlueJob 中 args getResolvedOptions() 方法的替代输入源是什么?
- php - 使用 Laravel Eloquent 加入
- python - 带有 post、get 和 data 的类视图
- flutter - 带时间的计步器 - Flutter