精华内容
下载资源
问答
  • oracle怎么取中文别名
    2021-05-03 04:01:32

    今天遇到一个奇怪的问题: 本来打算给一个数据检查的视图做一个参数表.

    SQL>create table d_data_look_over as select distinct upper(table_name) "table_name" from dw_log where start_date>trunc(sysdate-10);

    SQL> table created

    SQL> select table_name from d_data_look_over ;

    select table_name from d_data_look_over

    ORA-00904: "table_name": invalid identifier  报无效的标识符.

    在其他数据库下进行测试 没有发现异常

    百思不得其解,难道数据库出了问题? 但是执行下面的语句又是正常的

    SQL>select * from d_data_look_over;

    SQL>36 rows selected

    无意之间仔细检查创建表的语句,发现别名指定为小写的"table_name"

    SQL>select "table_name" from d_data_look_over;

    SQL>36 rows selected

    这样是可以正常查询的

    将这个表删除之后重新建了一次 并且将引号中的别名改为大写

    SQL>create table d_data_look_over as select distinct upper(table_name) "TABLE_NAME" from dw_log where start_date>trunc(sysdate-10);

    SQL> table created

    SQL> select table_name from d_data_look_over;

    SQL>36 rows selected

    可以正常查询没有问题.

    end;

    ps: 有时候字符问题确实能对初学者造成很大的困惑,昨天一个客户在QQ上说他写的一个存储过程无论如何也无法编译成功,于是我让他把脚本传过来,仔细查看之后没有发现问题,语句也完全是正常的,但是一直提示execute immediate这一行有问题,无意之间将这一行前面的空格删除之后 居然编译成功了 compiled successfully.之后考虑报错之由于前面的空格是中文全角空格造成的,删除了这个全角空格 自然也就不再报错了. 经过测试发现果然如此,中文输入法下也是正常的 但是切换为全角之后输入的空格就被认为是字符,从而无法成功编译.

    后记:发用这个方法可以实现使用Oracle的保留字作为字段

    例如:

    SQL>create table zyp (LEVEL number(1),

    SQL>                               COLUMN varchar2(10));

    ORA-00904:无效的标识符.

    SQL>create table zyp ("LEVEL" number(1),

    SQL>                               "COLUMN" varchar2(10));

    Table created

    但是要注意在查看的时候 需要加上"LEVEL" 必须为大写,否则会报错.

    更多相关内容
  • Oracle别名小结

    2021-05-01 11:43:41
    恩,此异常信息很明显,在SQL语句中标示符的长度过长了,简短一些就应该没问题了,我查看了一下我的SQL语句发现是我的查询字段的列别名过长,实际测试的结果为列字段别名的最大长度为30个字节!注意:我的测试数据库...

    今天在写一个简单的SQL语句并执行时抛出了如下图所示的一个错误提示信息!

    38663b44f29a403fc706845ea8734806.png

    恩,此异常信息很明显,在SQL语句中标示符的长度过长了,简短一些就应该没问题了,我查看了一下我的SQL语句发现是我的查询字段的列别名过长,实际测试的结果为列字段别名的最大长度为30个字节!

    注意:我的测试数据库是ORACLE 11.2.0.4.0(如下图所示)

    c4674097dd8e07c61e63704062df4d4c.png

    ok,问题搞定了,对应的更多的错误信息及解决方案,也可以从ORACLE的错误信息手册中查询比如(针对此问题):

    Error:

    ORA-00972: identifier is too long

    Cause:

    You tried to reference a table, cluster, view, index, synonym, tablespace, or username with a value that was longer than 30 characters.

    Action:

    The options to resolve this Oracle error are:

    Names for tables, clusters, views, indexes, synonyms, tablespaces, and usernames must be 30 characters or less. You must shorten the name to no more than 30 characters for these objects.

    以上内容是我分析和解决我的SQL语句中,查询时列的别名过长问题的过程,也是我分享这篇小博文的引子!

    下面是我针对别名的一个小结(注意:我的测试数据库是ORACLE 11.2.0.4.0 字符集是AMERICAN_AMERICA.AL32UTF8)

    一:使用别名的好处

    1)简化SQL语句的书写,特别是多表关联查询且表名较长时

    2)增强SQL语句的可读性,特别是当查询出来的列字段较为复杂时效果更为明显

    二:测试小结

    1)测试时使用的简单表结构

    CREATE TABLESALES.STUDENT

    (

    IDNUMBER,

    NAMEVARCHAR2(20BYTE),

    SEXCHAR(1BYTE),

    BIRTHDAY DATE,

    HOBBYVARCHAR2(20 CHAR)

    )

    2)测试使用的若干条测试数据

    9b37e89d4d80c18d9b009c1d6152a9a4.png

    3)列名的最大长度——30个字节

    SELECT ID ABCDEABCDEABCDEABCDEABCDEABCDE--30个英文大写字符,正常执行

    FROMSTUDENTSELECT ID ABCDEABCDEABCDEABCDEABCDEABCDE1--多加另一个1就会报ORA-00972:identifier is to long

    FROMSTUDENTSELECT ID 我们学校的好学生学号--10个中文汉字字符,正常执行

    FROMSTUDENTSELECT ID 我们学校的好学生学号1--多加另一个1就会报ORA-00972:identifier is to long

    FROM STUDENT

    4)是否可以使用AS关键字——可以使用

    SELECT ID AS 学号--使用AS的情况,正常执行

    FROMSTUDENTSELECT ID 学号--不适用AS也可以正常执行,而且代码更简洁,建议使用方式

    FROM STUDENT

    5)是否可以以数字开头——可以以数字开头但必须使用双引号括起来

    SELECT ID 123学号--执行时报"ORA-00923: FROM keyword not found where expected"

    FROMSTUDENTSELECT ID "123学号"--正常执行

    6)对于中文别名双引号、单引号、不使用引号的区别(注意:全是英文的单引或双引符号)——使用单引符号时报错

    SELECT ID 学号--正常执行

    FROMSTUDENTSELECT ID "学号"--正常执行

    FROMSTUDENTSELECT ID ‘学号‘--执行时报"ORA-00923: FROM keyword not found where expected"

    FROMSTUDENTSELECT ID StudentId--正常执行

    FROMSTUDENTSELECT ID "StudentId"--正常执行

    FROMSTUDENTSELECT ID ‘StudentId‘--执行时报"ORA-00923: FROM keyword not found where expected"

    FROM STUDENT

    7)是否可以使用其他的特殊符号比如:小括号——可以使用但必须使用双引号括起来(注意:其他的特殊符号可能类似,这里以小括号为例做了测试,其他情况如果感兴趣可以自己动手试试)

    SELECT ID AS (学号)--英文小括号且使用AS的情形,执行时报"ORA-00923: FROM keyword not found where expected"

    FROMSTUDENTSELECT ID (学号)--英文小括号,执行时报"ORA-00904: "ID": invalid identifier"

    FROMSTUDENTSELECT ID AS "(学号)"--正常执行

    FROMSTUDENTSELECT ID AS(学号)--中文小括号且使用AS的情形,执行时报"ORA-00923: FROM keyword not found where expected"

    FROMSTUDENTSELECT ID(学号)--中文小括号,执行时报"ORA-00904: "ID": invalid identifier"

    FROMSTUDENTSELECT ID "(学号)"--正常执行

    FROM STUDENT

    8)是否可以保留别名中的空格——可以,但必须使用双引号括起来

    SELECT ID 学 号--执行时报"ORA-00923: FROM keyword not found where expected"

    FROMSTUDENTSELECT ID "学 号"--正常执行

    FROMSTUDENTSELECT ID XUE HAO--执行时报"ORA-00923: FROM keyword not found where expected"

    FROMSTUDENTSELECT ID "XUE HAO"--正常执行

    FROM STUDENT

    9)使用别名时因SQL语句各子句的执行顺序引起的问题

    ORACLE中的SQL语句,

    1.WHERE/GROUP BY/HAVING子句中只能直接使用栏位或者常量,而不能使用栏位的别名,除非这个别名来自                   子查询之中,如:SELECT .... FROM (SELECT COLUMN_NAME C FROM TABLE_NAME) WHERE C > 1

    2.而ORDER BY 则可以直接使用别名,如SELECT COLUMN_NAME C FROM TABLE_NAME ORDER BY C

    这和SQL的执行顺序是有关的,SQL语句的执行顺序大致如下所示:

    1. FROM语句

    2. WHERE语句(结合条件)

    3. START WITH语句

    4. CONNECT BY语句

    5. WHERE语句

    6. GROUP BY语句

    7. HAVING语句

    8. MODEL语句

    9. SELECT语句

    10. UNION、MINUS、INTERSECT等集合演算演算

    11. ORDER BY语句

    我们可以看到SELECT子句是在WHERE子句执行后才执行的,当SELECT子句执行时查询列的别名才生成,所以在            WHERE子句中根本看不到列的别名,当然,自然也就无法引用列的别名了。 所以字段、表达式的别名在WHERE子            句和GROUP BY子句都是不能使用的,而在ORDER BY中不仅可以使用别名,甚至可以直接使用栏位的下标来进行            排序,如:ORDER BY ID或者ORDER BY 1

    SELECTID ID_FROMSTUDENTWHERE ID_=11--执行时报"ORA-00904: "ID_": invalid identifier"

    SELECTID ID_FROMSTUDENTWHERE ID=11--正常执行

    SELECTID ID_FROMSTUDENTWHERE ID=‘11‘--正常执行,注意:ID是NUMBER类型的数据

    SELECTID ID_FROMSTUDENTWHERE ID="11"--执行时报"ORA-00904: "11": invalid identifier",注意:ID是NUMBER类型的数据

    SELECT ID,COUNT(*) CFROMSTUDENTGROUP BYIDHAVING C>0--执行时报"ORA-00904: "C": invalid identifier"

    SELECT ID,COUNT(*) CFROMSTUDENTGROUP BYIDHAVING Count(*)>0--正常执行

    SELECT ID,COUNT(*)CFROMSTUDENTGROUP BYIDHAVING COUNT(*)>0

    ORDER BY C--正常执行

    SELECTID ID_FROMSTUDENTORDER BY ID_--正常执行

    SELECTID ID_FROMSTUDENTORDER BY 1--正常执行

    10)别名是否区分大小写——区分大小写(注意:当不用双引号括起来的时候英文字符大小写不敏感)

    SELECTXUEHAOFROM (SELECT ID XUEHAO FROMSTUDENT)WHERE XUEHAO > 1--正常执行

    SELECTXUEHAOFROM (SELECT ID xuehao FROMSTUDENT)WHERE XUEHAO > 1--正常执行

    SELECTXUEHAOFROM (SELECT ID "XUEHAO" FROMSTUDENT)WHERE XUEHAO > 1--正常执行

    SELECTXUEHAOFROM (SELECT ID "xuehao" FROMSTUDENT)WHERE XUEHAO > 1--执行时报"ORA-00904: "XUEHAO": invalid identifier"

    SELECTXUEHAOFROM (SELECT ID "xuehao" FROMSTUDENT)WHERE xuehao > 1--执行时报"ORA-00904: "XUEHAO": invalid identifier"

    SELECTXUEHAOFROM (SELECT ID "xuehao" FROMSTUDENT)WHERE "xuehao" > 1--执行时报"ORA-00904: "XUEHAO": invalid identifier"

    SELECT"xuehao"FROM (SELECT ID "xuehao" FROMSTUDENT)WHERE "xuehao" > 1--正常执行

    这个小例子也可以看到SQL语句是先执行WHERE子句然后才执行SELECT子句的!

    原文:http://www.cnblogs.com/godtrue/p/3791591.html

    展开全文
  • 1.特殊列名 前段时间在写一个接口时遇到了点特殊的麻烦。 由于接口内容要求返回json结果。这个简单无非查询一张表,查出接口想要的字段值,于是分...同样,中文列名也是如此使用: 如果对你有用 ,点赞可好?

    1.特殊列名

    前段时间在写一个接口时遇到了点特殊的麻烦。
    由于接口内容要求返回json结果。这个简单无非查询一张表,查出接口想要的字段值,于是分分钟写出来了,但是在仔细看接口需求文档时发现,接口要求的结果每个字段名都带有前缀“.”。
    例如:

    {
        "xx.a":"1",
        "xx.b":"2",
        "xx.c":"3",
        "xx.d":"4"
    }
    

    于是乎:a,b,c,d 飞快的实现了,但是前面的“xx.”有点麻烦呀。
    当时没有别的办法,只能把所有列结果查出来,然后在遍历一个个去拼接这个"xx."。
    功能是实现了,但这个问题我一直记着,肯定有更好的办法吧!
    所以:
    在这里插入图片描述
    不久之后我就发现了这种写法,as 虽然写sql用的非常多 但是这种写法我还是使用,以前一直觉得双引号在sql里是没有用的,而且还是错误的。现在才恍然大悟。

    2.中文列名

    同样,中文列名也是如此使用:
    在这里插入图片描述

    如果对你有用 ,点赞可好?
    展开全文
  • oracle 字段别名

    千次阅读 2020-12-12 11:23:52
    像 type,level这些字眼都是oracle的保留字,在数据表设计的时候,应该避免将字段采用这样的保留字来命名,否则可能会产生一些异常,带来不便。 如果非要用来命名,该咋办呢?,可以用双引号将它引起来,比如 create...

    像 type,level这些字眼都是oracle的保留字,在数据表设计的时候,应该避免将字段采用这样的保留字来命名,否则可能会产生一些异常,带来不便。

    如果非要用来命名,该咋办呢?,可以用双引号将它引起来,比如

    create or replace view work.v_alert as
    select 0 as "type",--<--看这里----------
    to_char(id) as sid,
    to_date(time,'yyyy-MM-dd hh24:mi:ss')  as time,
    region,
    (case when hotspot>=1 and dhw>=8 then 5 
    when hotspot>=1 and dhw<8 and dhw>=4 then 4
    when hotspot>=1 and dhw<4 and dhw>0 then 3
    when hotspot<1 and hotspot>0 then 2
    else 1 end) as "level" --<--看这里----------
    from alert_anlysis 
    

    这样子命名,视图创建了是创建了,但使用过程中就有问题,比如这样用

    select count(*),level from work.v_alert v group by level
    

    就会报错,报ORA-01788。原因是level是保留字,oracle会特别处理。

    我又发现,假如别名用双引号引起来,使用也有问题。比如我将上述视图创建语句这样写:

    create or replace view work.v_alert as
    select 0 as "alert_type",--<--看这里----------
    to_char(id) as sid,
    to_date(time,'yyyy-MM-dd hh24:mi:ss')  as time,
    region,
    (case when hotspot>=1 and dhw>=8 then 5 
    when hotspot>=1 and dhw<8 and dhw>=4 then 4
    when hotspot>=1 and dhw<4 and dhw>0 then 3
    when hotspot<1 and hotspot>0 then 2
    else 1 end) as "alert_level" --<--看这里----------
    from alert_anlysis 
    

    但还是报错,说是无法辨认alert_level。

    select count(*),level from work.v_alert v group by alert_level
    

    应该改为

    select count(*),"alert_level" from work.v_alert v group by "alert_level"
    

    其实alert_level已经不是保留字,创建视图时就没必要再加双引号了,去掉即可。

    另外,在sql server里面,用别名比较简单,如

    select alert_type=0 from table1;
    

    就得到一个名为alert_type的字段,其值为0。但oracle对这类赋值别名,需要这样写:

    select 0 as alert_type from table1;
    
    展开全文
  • oracle中给表和列起别名

    千次阅读 2021-05-01 00:36:19
    SELECT xxmc,sname asxsxm,sex,phone,address jzdzFROMstudent sLEFT JOIN xxjbxx x ON x.sid = s.sid此处的s为student表的别名,x为xxjbxx表的别名,xsxm是sname学生姓名的别名,jzdz是学生地址的别名ps:(1)表的别名...
  • oracle别名使用注意

    千次阅读 2021-05-08 18:31:45
    在sql查询中,合理的使用别名有很多好处一:使用别名的好处1)简化SQL语句的书写,特别是多表关联查询且表名较长时2)增强SQL语句的可读性,特别是当查询出来的列字段较为复杂时效果更为明显二.别名使用的注意事项1....
  • Oracle SQL 中文别名

    万次阅读 2012-04-16 21:46:03
    在导出Oracle数据库里的某些数据到excel时,列标题是一串字母就很不好看,也不方便阅读。 ...在网上找了一些资料,才发现,Oracle中文别名要用 "" 如: select name "姓名" from users;
  • Oracle中给查询的返回列起别名

    万次阅读 2018-04-15 17:47:06
    Oracle中给返回的列起别名有三种方法:①在需要返回的列名后面直接加上别名SELECT TS# 编号,NAME 表空间名 FROM V$TABLESPACE;②在需要返回的列名后面加AS 别名。执行效果与①中相同。SELECT TS# AS 编号,NAME ...
  • 关于Oracle语句中case when起别名

    千次阅读 2018-03-19 16:18:16
    配合前端框架,前后台查出来的...查了相关资料才知道,oracle case when 取别名是不能带as的,去掉as即可。 而且性别还不能带单引号,一般程序里都是英文,如果是汉子,还不能带单引号,直接汉子即可,说明下。
  • 当我尝试输入我自己的表名作为别名时,它没有被识别。我应该做什么? 3 个解决方案 #1 1 Define Table() method before all of your mapping declaration. 在所有映射声明之前定义Table()方法。 public EmployeeMap :...
  • ORACLE SQL性能优化系列

    2021-05-03 08:23:45
    ORACLE SQL性能优化系列 (一) black_snail(翻译)关键字 ORACEL SQL Performance tuning出处 http://www.dbasupport.com1. 选用适合的ORACLE优化器ORACLE的优化器共有3种:a. RULE (基于规则) b. COST (基于成本) c. ...
  • 个人踩坑记录 写完sql语句,发现报错ora-00923未找到要求的...第三步:观察发现第一行和第二行别名,第二行以数字开头,有蓝色着重。改为不带数字也没问题 第四步:给以数字开头的别名加上“” 发现问题解决 ...
  • CREATE OR REPLACE VIEW PER_EMPLOYEES_CURRENT_X(business_group_id, organization_id, employee_id, assignment_id, last_update_date, last_updated_by, last_update_login, creation_date, created_by, employee...
  • 乱码之乱,乱在心里。...01、查询oracle服务端默认语言 select * from nls_database_parameters NLS_LANGUAGE AMERICAN ###客户端编码 NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA...
  • 关于Oracle数据库起别名

    千次阅读 2017-11-28 19:29:57
    -- 给字段起别名得用双引号 使用或者不适用as关键字都可以。 不管别名是英文还是中文。  -- 给表起别名 不能使用as关键字 使用或者不使用双引号都可以。
  • Mysql查询取别名报错

    2021-02-07 21:41:35
    image 从上面截图中发信name是我们需要获取的字段别名,查看下图 我们应该走上面的判断逻辑通过this.getField(column).getName() 获取字段别名,因此需要将useOldAliasBehavior设置为true image 三、问题解决 通过...
  • Oracle中as关键字不能用于指定表的别名,在Oracle中指定表的别名时只需在原有表名和表的别名之间用空格分隔即可,  但可以用于指定列的别名,但在存储过程中如果列的别名与原有列名相同,在运行时会报错(编译...
  • “平均成绩”没有加引号,能正确降序排列 select sid, sum(score) as '总成绩', avg(score) as '平均成绩'… Java Web 端做查询时,性别字段存的是数字,1代表男,2代表女,数据时将性别转为汉字显示在页面,sql语句如下...
  • 给表添加注释: comment on column 表名.字段名 is '注释内容'; 给字段添加注释: comment on table 表名 is '注释内容'; 备注:表名和字段名使用双引号
  • SQL,select的字段如何取别名

    万次阅读 2018-06-15 11:13:11
    SQL如何取别名 access 多表查询有重复的字段,而且要前台绑定,怎么办?access用 列表+空格+别名可不行! 要这样:SELECT product.id as productId,
  • Oracle_讲义.doc

    2020-05-07 10:46:57
    oracle讲义特别详细的学习资料
  • 客户别名 编码 名称 、使用拼音排序  select * from t order by nlssort(field,'NLS_SORT=SCHINESE_PINYIN_M'); 2、使用笔画排序  select * from t order by nlssort(field,'NLS_SORT=SCHINESE_STROKE_M'); 3...
  • oracle的基本查询

    2021-04-30 07:38:15
    1 Oracle的基本查询语句查询:使用最频繁的一个操作,可以从一个表中查询数据,也可以从多个表中查询数据语法:select [distinct] * / cilum_name / expression [alias]from tablewhere conditionalias指定别名...
  • oracle mysql 字符串转日期 to_date(date,‘yyyy-mm-dd’) str_to_date(date,’%Y-%m-%d’) 日期转字符串 to_char(date,‘yyyy-mm-dd’) date_format(date,’%Y-%m-%d’) 字符串拼接 name||age concat...
  • 目录引言安装Oracle数据访问组件ODAC1. ODAC包下载地址2. ODAC包解压缩3. ODAC包安装4. 设置环境变量5. 配置tnsnames.ora文件6. 注意事项7. 遇到的问题Sql Server 远程连接Oracle1. 图形界面创建Oracle链接服务器2. ...
  • Oracle】函数的基本使用
  • Oracle最全基础教程 用户与权限 创建用户 CREATE USER USER_NAME IDENTIFIED BY PASSWD; --创建用户 修改密码 ALTER USER USER_NAME IDENTIFIED BY NEW_PASSWD; --修改新密码 --修改用户密码 PASSWD USER_NAME; ...
  • Oracle常用文档整理

    2021-09-27 22:36:02
    oracle自右而左进行解析,from子句中应该将最先需要被处理的表写在最右边,如果有3个以上的表连接查询,那就需要选择那个被其他表所引用的表放在最后; ORACLE采用自右而左的顺序... 多表连接时,多使用别名,字..

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,595
精华内容 2,238
关键字:

oracle怎么取中文别名