当我尝试在某个模式中创建分区时,我收到一个错误 - 必须是表的所有者。命令:create table ... partition of... 正常表的创建和删除没有问题。显然,分区权限不够?
Анатолий Эрнст's questions
有一个批处理表功能。
在本地它工作正常。从另一台服务器,它们在函数模式的所有者下连接。单个值由其他函数正常返回。调用表函数时,错误是 - 函数处于不兼容状态。
也就是说,每次调用它都会使包失效。可能是什么原因?
有一个记录序列,其中数字写在字段 A 中。这个序列的正常形式是连续的 (1, 2, 3, 4, 5)。
如何通过查询确定序列是否损坏?
序列违规示例:(1, 2, 4, 5, 7) 或 (1, 2, 2, 3, 4)。
我想以某种方式通过阶乘来解决问题,但没有掌握它。有人对解决方案有任何想法吗?
PS 建议的副本不考虑重复值。
出于实验的目的,通过alter table modify ...使用间隔分区和静态子分区将普通表执行到分区表中。
有没有办法让它恢复到反向状态?
我只是不想恢复 DDL 和复制数据(这需要很长时间并且需要资源)。
您想阻止批处理过程再次运行。但是我不想在表中使用当前启动的标志,我想从内存中获取它。据我从文档中了解到,全局上下文仅在特定会话中可用。
您如何以某种简单优雅的方式提供闭会期间的交流?
也就是说,所有会话的一个变量。
需要保证表中存在具有一定值的单行。也就是说,这样在更新和添加记录时,该列和当前记录的值获取值 1,其余所有值 - 0。
试图让它成为一个触发器。before insert一切都很好。但是要更新什么呢?或者除了触发器之外还有其他一些解决方案?
例子:
-- Создаем таблицу
create table tx (
id integer,
val varchar2(100)
);
-- Данные
-- truncate table tx
insert into tx
select level, 0 from dual connect by level < 11;
update tx set val = 1 where id = 5;
commit;
只能添加 1 条记录,也可以更新。
添加和更改时,您需要:
val = 1记下前一个值为 0的条目- 对于最后修改的条目,最好强制
val = 1.
在Live SQL上执行以下脚本时,出现错误:
ORA-01410:无效的 ROWID
ORA-06512:在第 24 行
ORA-06512:在“SYS.DBMS_SQL”,第 1721 行
毕竟,光标应该指向一个特定的t2.rowid,不是吗?
测试数据:
create table t1 (
id integer primary key,
val varchar2(100)
);
create table t2 (
id integer primary key,
gr_id integer,
val varchar2(100)
);
insert all
into t1 values (1, 'A')
into t1 values (2, 'B')
into t1 values (3, 'C')
into t2 values (1, 1, 'X11')
into t2 values (2, 1, 'X21')
into t2 values (3, 2, 'X32')
into t2 values (4, 2, 'X42')
into t2 values (5, 3, 'X53')
into t2 values (6, 3, 'X63')
select * from dual;
commit;
脚本本身:
declare
type t_rec is record (id integer, val t2.val%type);
s_rec t_rec;
cursor cur is
select t1.id, t2.val
from t1, t2
where t2.gr_id = t1.id
for update of t2.val nowait;
begin
open cur;
loop
exit when cur%notfound;
fetch cur into s_rec;
update t2 set val = val||' Y'
where current of cur;
end loop;
close cur;
end;
如何更改此查询,以便仅当它在选择b中并且在选择中时才选择该数字c?
with a(v) as
(
select 1 from dual
union all
select 2 from dual
union all
select 3 from dual
),
b(v) as
(
select 1 from dual
union all
select 9 from dual
union all
select 5 from dual
),
c(v) as
(
select 1 from dual
union all
select 2 from dual
union all
select 5 from dual
)
select * from a
where
not exists (select 1 from b where a.v = b.v) and
not exists(select 1 from c where a.v = c.v);
TP 已SYSTEM用完空间。但是由于包经常被删除、重命名和编译,我怀疑索引I_SOURCE已经增长了很多并且碎片整理了很多。此 TP 不允许使用索引的常用方法。
告诉我,如何压缩或增加 TP 空间SYSTEM?
完成以下操作:
create type del_t_quest is object (v1 varchar2(1000), v2 varchar2(1000));
create table del_quest
(
id integer generated always as identity,
q del_t_quest
);
insert into del_quest
(q)
values
(del_t_quest('aaa','qqq'));
commit;
select id, (select * from table(w.q)) from del_quest w;
ORA-22905: 无法访问非嵌套表元素的行
如何在 SQL 查询中显示这些数据?错误的原因是什么?
该查询使用以下条件:
t1.field = replace(t2.field, <Сложная конструкия вычислений по тексту, insrt, substr и т.д.>)
因此,对于每一行,计算该值。
我计划将这些计算转换为以下形式的确定性函数:
func(p_t2_field) <Сложная конструкия вычислений по тексту, insrt, substr и т.д.> return
为了不计算,而是立即从缓存中获取所需的选项(如果它以前用作函数参数)。
在这种特殊情况下有意义吗?
另一个传递的问题是,是否有可能以某种方式找出缓存中已包含哪些选项?
创建了具有自动创建分区的分区表(范围、间隔 - 1、键号)
partition by range (gr_id)
interval (1)
(
partition v_less_1 values less than (1)
)
enable row movement
如果先插入 gr_id = 4 的记录,则创建 high_value = 5 的分区;如果再添加 gr_id = 2 的记录,则进入该分区,不会创建 high_value = 3 的分区。这是合乎逻辑的。
但是,如果我需要准确区分具有此插入顺序的分区,那我该怎么办?在这种情况下我可以使用自动分区,还是必须为单个值硬编码所有分区?
假设在一个会话中将记录插入到表中(在提交之前),同时在另一个会话中收集有关该表的统计信息。
是否会收集统计信息,还是会等待提交对表的更改?
如果有数据插入到表的某个分区,阻塞的是什么(整个表)?
也就是说,是否可以同时将数据插入一个分区并从另一个分区删除?
告诉我,如何在现有分区的基础上尽快创建新表?
我们正在谈论大量数据和创建运行时间的关键性。也许有一些技巧...
在 IntelliJ IDEA 上构建项目时出现以下错误
无法获取' https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-gradle-plugin/2.1.6.RELEASE/spring-boot-gradle-plugin-2.1.6。释放.pom '。从服务器收到状态代码 407:需要代理身份验证 启用 Gradle '离线模式'并同步项目
在哪里可以指定代理服务器上的授权数据?
有 2 组记录具有相同的字段。但是行数不同。在这种情况下,第一组和第二组中都可以有更多的行。
必须输出所有行并在单独的列中放一个符号 - 1,如果这样的条目在第一组中,0 - 如果它不在第一组中(即它只在第二组中) . 记录的身份 - 通过所有字段的值的巧合。同时,按字段值总和的记录在一组内是唯一的。
也就是说,如何做这样的事情:
with aw (v1, v2, v3) as
(
select 1, 2, 4 from dual
union all
select 1, 3, 4 from dual
union all
select 1, 3, 2 from dual
union all
select 5, 2, 4 from dual
union all
select 1, 7, 4 from dual
union all
select 1, 2, 6 from dual
),
bw (v1, v2, v3) as
(
select 1, 2, 4 from dual
union all
select 1, 3, 40 from dual
union all
select 1, 30, 2 from dual
union all
select 5, 2, 4 from dual
union all
select 10, 7, 4 from dual
union all
select 1, 2, 6 from dual
)
select
aw.v1, aw.v2, aw.v3,
bw.v1, bw.v2, bw.v3,
case when aw.v1 = bw.v1 and aw.v2 = bw.v2 and aw.v3 = bw.v3 then 1 else 0 end
from
aw
cross join
bw
Java教程的摘录:
与其他一些语言不同,Java 没有自动类型转换。类型不匹配不会导致翻译警告,但会导致错误消息。对于每种类型,都严格定义了一组允许的值和允许的操作。
但是,实际示例有效(执行不同类型的操作数之间的计算):
public class MyClass {
public static void main(String args[]) {
int y = 54;
double x = 1.543E4;
char f = '2';
double h = y*x*f;
System.out.println(h);
}
}
说明书还有别的意思吗?请提供类型不匹配的示例。
为什么在这个查询中使用的是INDEX RANGE SCAN,而不是INDEX FAST FULL SCAN,因为所有的值都在索引本身中,可以从那里选择而不需要参考表?
-- Создание таблицы и построение функционального индекса
create table del_nvl_ind as
select
id,
case when val < 1 then null else round(val)*12 end val
from
(
select
level id,
level * dbms_random.value val
from dual
connect by level < 1000000
);
create index del_nvl_idx_nvl on del_nvl_ind (nvl(val,0));
-- Получение плана запроса
explain plan for
select val from del_nvl_ind where nvl(val,0) = 100;
select * from table(dbms_xplan.display);
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
-------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 10000 | 107K| 600 (1)| 00:00:01 |
| 1 | TABLE ACCESS BY INDEX ROWID BATCHED| DEL_NVL_IND | 10000 | 107K| 600 (1)| 00:00:01 |
|* 2 | INDEX RANGE SCAN | DEL_NVL_IDX_NVL | 4000 | | 3 (0)| 00:00:01 |
-------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - access(NVL("VAL",0)=100)
还有一个问题 - 我如何更改查询以便 INDEX FAST FULL SCAN 出现在计划中?
一个例子在这里:https ://oracle-base.com/articles/12c/automatic-list-partitioning-12cr2
文本
或者,我们可以使用 AUTOMATIC 关键字重新创建表。
CREATE TABLE orders
(
id NUMBER,
country_code VARCHAR2(5),
customer_id NUMBER,
order_date DATE,
order_total NUMBER(8,2),
CONSTRAINT orders_pk PRIMARY KEY (id)
)
PARTITION BY LIST (country_code) AUTOMATIC
(
PARTITION part_usa VALUES ('USA'),
PARTITION part_uk_and_ireland VALUES ('GBR', 'IRL')
);
我正在尝试重现,错误:ORA-00922: отсутствует или неверна опция
D B:Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit
Production
您能告诉我问题出在示例中还是在我身上?))