在我的主表中,表结构列没有双引号,但是在View列中有双引号。将视图中的数据插入表中时出错。 这是 tbl
的表结构create table tbl (ID number(10),
name varchar2(50),
addr varchar2(200));
视图为-
create or replace view t_view as
select "ID", "name", "addr" from tbl;
从 t_view -
将数据插入 tbl 时insert into tbl
select * from t_view;
然后出现错误ORA- 00904: "addr": Invalid identifier
。
那么如何解决此问题,我可以从视图创建中删除双引号。
答案 0 :(得分:3)
删除代码中所有地方的所有双引号。
如果在创建对象时使用它们,则必须始终使用它们,并指定完全相同的字母大小写。
要摆脱这些麻烦,Oracle默认情况下是不区分大小写的,并且会将所有名称都视为大写(但是您可以根据需要以任何方式引用它们,只是不要使用双引号!)。
答案 1 :(得分:0)
Oracle默认将任何对象的名称存储在大写中。如果提供了双引号,那么只有Oracle会按原样存储对象的名称。
在您的情况下,在编写表的DDL时,您没有在双引号中提供列名,因此您的表名和列名存储在元数据的大写中。
您可以使用以下查询看到相同的内容
select table_name, column_name from user_tab_columns where table_name = 'TBL';
要给出答案,请使用以下语法之一创建视图:
create or replace view t_view as
select ID, name, addr from tbl; -- no double quotes
create or replace view t_view as
select "ID", "NAME", "ADDR" from tbl; -- UPPERCASE column names in double quotes
请参阅演示here
干杯!
答案 2 :(得分:0)
您要完成什么。您的要求没有任何意义。您的预期声明
insert into tbl select * from t_view;
完成与
完全相同的操作insert into tbl select * from tbl;
这不是您不能(可以)这样做,但只会导致大量重复数据问题或(希望)唯一违反约束。