小编Mic*_*l-O的帖子

从 Oracle 函数返回一个完全动态的表

我想编写一个带有两个IN参数的函数,其中第一个是 a varchar,第二个是varchars. 基于这些,我想返回一个具有不同列数量和类型名称的表varchar

据我所知,我必须始终创建一个对象/记录和它的表类型。这意味着我的想法行不通?基本目标是将系统命令输出作为表传递回被调用者。

编辑:更多关于任务。我想发出一个操作系统命令,使用输出并将其作为表返回。OS 命令的输出将是 CSV 格式的数据。在执行时,我不知道要返回的行数,而只知道作为第二个参数传递的列数。我正在考虑使用带有动态STRUCTARRAY包含它们的Java 。虽然我更喜欢前一种方法。

它应该是这样的:

create function(clob query, list of varchars cols) returns table
begin
  execute system command(query, cols);
  examine sysout from command;
  return tabular data from syscmd as table;
end
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g-r2 plsql

8
推荐指数
1
解决办法
1万
查看次数

在 Oracle 11g 中授予对特定架构的创建权限

我有两个用户 A 和 B。我想授予 B 创建、删除等 A 架构中所有表的权限。据我所知,我可以授予 B 对所有模式的完全访问权限,而不是特定模式。这样对吗?

oracle security

7
推荐指数
1
解决办法
4万
查看次数

在 PL/SQL 语句中两次使用相同的序列

我今天写了 PL/SQL 的片段:

declare
  first_id number;
  second_id number;
begin
  insert into table (sort_nr, text_id, unit_id) values(...,
  table_seq.nextval, table_seq.nextval) returning text_id, unit_id 
  into first_id, second_id;
  dbms_output.put_line(first_id);
  dbms_output.put_line(second_id);
end;
Run Code Online (Sandbox Code Playgroud)

并收到了唯一的常量违规。经过进一步检查,我发现了它,first_id并且second_id在其中具有相同的价值。

我的问题是:在同一个语句中多次调用同一个序列并接收后续号码是否有任何限制?从我的角度来看,似乎nextval只在查询范围内调用一次并缓存。

只是附带说明,我无法更改那个糟糕的架构以避免在两列中使用相同的序列。

oracle plsql sequence

7
推荐指数
1
解决办法
1万
查看次数

绑定变量在 Oracle 中应该走多远?

我目前正在检查我们部门所有数据库用户的 SQL 代码是否没有使用绑定变量。我们确实在一段时间内遇到了 ORA-04031 错误。

现在,我非常清楚在何处使用它们,但我不确定这应该走多远。现在,我是否必须用绑定变量替换所有文字?

例如:

select 1 from t1 ; => select :one from table t;
Run Code Online (Sandbox Code Playgroud)

或者

select c1, c2, from t2 where id = :id and status = 2 =>
select c1, c2, from t2 where id = :id and status = :two
Run Code Online (Sandbox Code Playgroud)

或者

select * from t3 where c3 > :value and exists (select 1 from t4 where <some condition>) =>
select * from t3 where c3 > :value and exists (select :one from …
Run Code Online (Sandbox Code Playgroud)

oracle oracle-11g-r2 plsql

3
推荐指数
1
解决办法
1458
查看次数

外键索引使查询速度极慢

我们最近遇到了由于临时表空间溢出而导致查询速度大幅下降的情况。特定查询会导致此问题。

被查询的表 ( table3) 有一个索引 PK、三个带索引的 FK 和三个 FK 上的复合唯一约束。令人反感的查询如下所示:

SELECT ...
  FROM table1 t1, table2 t2, table3 t3
  WHERE t1.abs_id = ?
    AND t3.vgs_id = t1.vgs_id
    AND t3.ai_id > ?
    AND t2.id = t1.t2_id
    AND t2.status = 2
    AND t2.felddimension = 0
    ...
Run Code Online (Sandbox Code Playgroud)

只有实例重启解决了这个问题。即使杀死连接也没有帮助。

经过对FK和索引的进一步调查,结果是t3.ai_id列上的索引导致性能严重下降。禁用此功能后,独特的约束非常快地为查询提供服务。

有问题的部分是AND t3.ai_id > ?(范围扫描)。唯一扫描不会造成任何麻烦。

现在的问题是,一个指数怎么会导致这样的放缓,而且,我该如何调查原因?它根本不适合我。

竞争时间:正常 10 秒,减速 > 2 分钟或永不返回。

编辑 1 (2013-06-05):根据 Jack Douglas 和 Chris Saxon 的建议,我已经运行了统计数据,然后执行了解释计划,我已经取得了巨大的飞跃。

我已经计算了带和不带索引的模式统计信息。无论索引是否可用,优化器使用 3-field-composite-unique-index 使查询速度极快。

这是 SQL Developer 的解释计划:

快速查询

到目前为止一切顺利,现在我在查询中添加了使用 …

index oracle oracle-11g-r2 select

3
推荐指数
1
解决办法
2667
查看次数

从另一个帐户使用自己的表空间写入不同的模式

假设我创建了这两个帐户:

CREATE USER u1 IDENTIFIED BY "&&u1Password"
    DEFAULT TABLESPACE u1tbs
    TEMPORARY TABLESPACE temp
    QUOTA UNLIMITED ON u1tbs
    QUOTA 256M ON users
    QUOTA 0M ON ket;

CREATE USER u2 IDENTIFIED BY "&&u2Password"
    DEFAULT TABLESPACE u2tbs
    TEMPORARY TABLESPACE temp
    QUOTA UNLIMITED ON u2tbs
    QUOTA 256M ON users
    QUOTA 0M ON u1tbs;
Run Code Online (Sandbox Code Playgroud)

我已授予 u2 对 u1 架构的完全访问权限。如您所见,u1 中的所有表都在表空间 u1tbs 中。当 u2 向 u1 的模式添加数据时,数据会去哪里?如果是这样,它不会与quota 0M on ...?

编辑:问题应该在 dba.stack 上...

schema oracle

2
推荐指数
1
解决办法
1714
查看次数

标签 统计

oracle ×6

oracle-11g-r2 ×3

plsql ×3

index ×1

schema ×1

security ×1

select ×1

sequence ×1