文章目录
SELECT查询相关
ORA-00942: 表或视图不存在
-
现象:明明已经新建了视图,并提交了,直接查询的时候还是报了这个错
-
解决:视图名那加双引号,与建立的时候保持一致
--SELECT * FROM VIEW_NAME 报错,需要加双引号
SELECT * FROM "VIEW_NAME"
- 原因:Oracle对大小写敏感,通常在创建和查询时对名称数据库会自动转为大写,但语句中有引号时会按引号中的内容保留;权限问题,当前schema没有该表、视图的访问权限。
建表
分区相关
范围分区语法格式参考:
CREATE TABLE schemaname.tablename
AS
(
columnname1 datatype,
columnname2 datatype
)
PARTITION BY RANGE (按哪列分区的列名)
(
PARTITION 分区名1 VALUES LESS THAN (条件) ,
PARTITION 分区名2 VALUES LESS THAN (条件)
)
问题SQL
CREATE TABLE "SPF"."SUM_INPUT_WO"
(
"OPERATION_ID" VARCHAR2(64) NOT NULL ENABLE,
"OPERATION_DESC" VARCHAR2(64) NOT NULL ENABLE,
"DATE" VARCHAR2(64),
"DFT_CODE" VARCHAR2(64)
"INTERFACE_TIME" DATE,
"HOUR_TIMEKEY" VARCHAR2(80)
)
PARTITION BY RANGE ("DATE")(
PARTITION PART_202402 VALUES LESS THAN ('2024/03/01') TABLESPACE S_COM_DAT OVERFLOW TABLESPACE S_COM_DAT
,PARTITION PART_202403 VALUES LESS THAN ('2024/04/01') TABLESPACE S_COM_DAT OVERFLOW TABLESPACE S_COM_DAT
--PARTITION PART_202402 VALUES LESS THAN (to_char('20240301','YYYY/MM/DD')) TABLESPACE S_COM_DAT OVERFLOW TABLESPACE S_COM_DAT
)
报错:ORA-14020: 不能指定表分区的此物理属性
原因:建表时未指定TABLESPACE,删除后就成功了。
- 最开始,对分区的范围用了to_char(‘20240301’,‘YYYY/MM/DD’),本身string再去to_char就有问题,低级错误,这个时候的报错是:ORA-14019: 分区界限元素必须是一个: 字符串, 日期时间或间隔文字, 数字或 MAXVALUE
- 然后以为是用了关键字DATE导致没法对这一列进行分区,但关键字已经用引号引起来了,应该不至于有影响,试着删了后边的table space提示执行成功
同义词synonym
部分schema建public同义词提示权限不足,可以找DBA执行以下SQL:
grant create public synonym to schemaname
同义词参考语法
CREATE PUBLIC SYNONYM 同义词名 for schema.表名;
这样就可以用同义词名查出该表了(由于是public的,其它视图用同义词名也可以查出来)
时间相关
ORA-01839: 指定月份的日期无效
2023年12月31日运行
SELECT to_char(sysdate-INTERVAL '1' MONTH,'yyyymmdd') FROM dual
报错
ORA-01873: 间隔的前导精度太小
2023年12月31日运行
SELECT to_char(sysdate-INTERVAL '180' day,'yyyymmdd') FROM dual
改为
SELECT to_char(sysdate- 180,'yyyymmdd') FROM dual