为什么lette'm'在以下查询中扮演特殊角色?我试图创建一个TRIM函数,我坚持使用它.或者:当我从双表和另一个表查询时有什么不同.
例如
我创建了一个包含一列和两个值的表('adam'和'apperda')
create table x
(col1 varchar2(20));
insert into x values ('adam');
insert into x values ('apperda');
Run Code Online (Sandbox Code Playgroud)
然后我选择TRIM(TRAILING ...)和RTRIM如下:
select
col1,
trim(trailing 'am' from col1) traling,
rtrim(col1, 'am') rtim
from x;
Run Code Online (Sandbox Code Playgroud)
结果是:'ad'和'apperd'
COL1 TRALING RTIM
-------------------- -------------------- --------------------
adam ad ad
apperda apperd apperd
Run Code Online (Sandbox Code Playgroud)
我不明白为什么apperd会出现结果......这应该是一条错误信息,不应该是这样的:ORA-30001:trim set应该只有一个字符?
我尝试了另外两个选择:
删除了选择的修剪(尾随...)部分.
select
col1,
trim(trailing 'am' from col1) traling
from x;
Run Code Online (Sandbox Code Playgroud)从双重选择
select
trim(trailing 'am' from 'apperda'),
from dual;
Run Code Online (Sandbox Code Playgroud)这两个查询都给我错误信息:
ORA-30001:修剪集应该只有一个字符
查询中的加号行提供加信息?或者它是如何可能的?它不仅仅是一个查询问题,而且似乎两个数据(adam和apperda)相互作用:
我创建一个简单的查询,apperda它显示错误:
select
trim(trailing …Run Code Online (Sandbox Code Playgroud) 我想用ddl触发器(在放置之前)创建一个备份表,并遇到以下问题.
发生第一次丢弃时没关系:a_backup表包含丢弃表的数据.但为什么我不能放弃另一张桌子?
ORA-01031:权限不足
create table b (x number);
Run Code Online (Sandbox Code Playgroud)
- 表B已创建.
create table a (x number);
Run Code Online (Sandbox Code Playgroud)
- 表A已创建.
create table a_backup as select * from a where 1 = 0;
Run Code Online (Sandbox Code Playgroud)
- 表A_BACKUP已创建.
create or replace trigger a_backup_tr
before drop
on database
begin
IF ora_dict_obj_name <> 'A' then
null;
ELSIF ora_dict_obj_name = 'A'
and ora_dict_obj_owner = 'TRANEE' then
insert into a_backup
select * from a;
ELSE null;
end if;
end;
/
Run Code Online (Sandbox Code Playgroud)
- 触发A_BACKUP_TR编译
-- 1
drop table a;
Run Code Online (Sandbox Code Playgroud)
- 表A下降.
-- 2 …Run Code Online (Sandbox Code Playgroud)