oracle里面的字段名字如果带双引号会导致问题

strip 2003-01-14 05:42:56
今天发现:
create table STUDENT(
"s_id" INTEGER not null
)
/

create table STUDENT(
s_id INTEGER not null
)
/
是有区别的 :(((((((((((((((((

如果是第一种情况建表:
SQL> desc STUDENT;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------
s_id NOT NULL NUMBER(38)

SQL> select s_id from STUDENT;
select s_id from STUDENT
*
ERROR 位于第 1 行:
ORA-00904: "S_ID": 无效的标识符
SQL> select "s_id" from STUDENT;

s_id
----------
1

如何让Oracle忽略创建的时候加入的双引号? 使得用select s_id from STUDENT也能用?
...全文
1051 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
strip 2003-01-16
  • 打赏
  • 举报
回复
谢谢各位, 原因我现在明白了

后来我是修给PD的设置让它产生的script不带有双引号

现在在和"表空间"作战
penitent 2003-01-15
  • 打赏
  • 举报
回复
啊,这么多星星啊
在oracle中,如果不加双引号,oracle会转化为大写,
如果加了双引号,oracle将保持不变,但以后的查询就可能会有麻烦,
如你创建了一个小写名称的表,那么引用这个表时,也必须用双引号来引用.
但是如果你的引号中的内容是大写的话,加不加都一样了.
所以建议ddl语句不要用引号,如果用,也要大写,避免不必要的麻烦
ruixp 2003-01-15
  • 打赏
  • 举报
回复
改用大写,否则字段出现单引号
qiuyang_wang 2003-01-14
  • 打赏
  • 举报
回复
如果你看一下:SYS.USER_COLUMNS的内容就明白了,原因是你创建了含有小写字母的表.ORACLE本事默认字段名,表名是大写.
比如:CREATE TABLE TEST (COL_TEST NUMBER(5));和
CREATE TABLE test (col_test NUMBER(5));是一样的。而:
CREATE TABLE test ("col_test" NUMBER(5)); 就不同了。因为它创建出来的表的列是小写字母。而对于小写字母列或表的访问也一定要写上双引号才可以。
比如我可以创建一下三个表:
CREATE TABLE test (aa date);
CREATE TABLE "test" (aa date);
CTEATE TABLE "Test" (aa date);
并且我可以分别对他们三个进行操作:
insert into test values(sysdate);

select COUNT(*) from TEST; //1
select COUNT(*) from "test"; //0
select COUNT(*) from "Test"; //0

insert into "Test" select * from test;
insert into "test" select * from "Test";
insert into test values (sysdate);

select COUNT(*) from TEST; //2
select COUNT(*) from "test"; //1
select COUNT(*) from "Test"; //1

需要注意的是必须使用双引号,不能是单引号。由于双引号的作用,我们可以使用系统内部关键字来建表:
Create table "TABLE" ("TABLE" VARCHAR2(30),"COLUMN" VARCHAR2(30));
insert into "TABLE" values('TEST','AA');
insert into "TABLE" values('test','AA');
insert into "TABLE" values('Test','AA');


beckhambobo 2003-01-14
  • 打赏
  • 举报
回复
sorry,看错。

加了引号只能按字段名称大小写来操作。
lizhen 2003-01-14
  • 打赏
  • 举报
回复
在oracle建表的时候,自动把字段名称变为大写,如果在字段名称上加双引号的话将不自动改变。
create table a
(a varchar2(20));

create table a
("A" varchar2(20));
是完全相同的,都可以用select a from a;查询。
beckhambobo 2003-01-14
  • 打赏
  • 举报
回复
select S_ID from student;改用大写

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧