小编Gau*_*oni的帖子

oracle中的dense_rank()分析函数

SELECT empno, deptno
dense_rank() OVER (PARTITION BY deptno
     ORDER BY sal NULLS LAST) SRLNO
FROM emp
WHERE deptno IN (10, 20)
group by empno, deptno  --,sal
ORDER BY deptno, SRLNO;
Run Code Online (Sandbox Code Playgroud)

此查询不起作用,因为它Sal应该在group by子句中.任何人都可以解释为什么会这样,并且有没有其他选择在不改变group by子句的情况下获得相同选择的排名?你想只根据工资订购排名.

编辑
假设在emp表中有另一个列名commision,我必须通过deptno和commision分组并仅通过deptno进行分区,那么建议的答案是什么:

    SELECT empno, deptno,sum(sal) 
    dense_rank() OVER (PARTITION BY deptno
     ORDER BY sal NULLS LAST) SRLNO
    FROM emp
    WHERE deptno IN (10, 20)
    group by  deptno,commision  --,sal
    ORDER BY deptno, SRLNO;
Run Code Online (Sandbox Code Playgroud)

现在我如何通过depno和commision进行分组,并且只能通过deptno进行分区.

如何在不同的列上进行分组并根据不同列的分区查找排名

sql oracle analytic-functions oracle10g

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

"不存在"和"不存在",哪一个表现更好?

select objectid
      ,name
      ,address
 from library_t l 
 where not exists (select *
                     from d107 d 
                    where l.objectid = d.objectid
                   )

select objectid
      ,name
      ,address
  from library_t l 
  where l.objectid not in (select objectid 
                             from d107
                          )
Run Code Online (Sandbox Code Playgroud)

如果两个objectid列都有索引,哪一个在oracle中更好?

sql oracle

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

使用oracle触发器审核50列

我需要建立一个triggeroracle 11g用于审核表.

我有一张表50 columns需要audited.

  • 对于every new insert表格,我需要输入一个条目audit table (1 row).
  • 因为every update,假设我更新1st 2nd column,那么它将在审计中创建两个记录 old value and new value.

审计表的结构将是

 id        NOT NULL
 attribute NOT NULL
 OLD VALUE NOT NULL
 NEW VALUE NOT NULL
 cre_date  NOT NULL
 upd_date  NULL
 cre_time  NOT NULL
 upd_time  NULL
Run Code Online (Sandbox Code Playgroud)

在情况下insert,只有主键(主表),即中idcre_date and cre_time需要填充和attribute等于*,在更新的情况下,假设可乐COLB正在更新,那么所有需要被populated.In这种情况下,两个记录将被创建第一条记录的属性colA和相应的old and new值,并且相同 …

oracle triggers oracle11g

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

数据没有从sql加载器填充

我有一个控制文件,loader.ctl,in C:\oracle\product\10.2.0\oradata\orcl.

loader.ctl文件的内容是

 load data
 infile 'd:\mydata\test.csv'
 into table emp1
 fields terminated by "," optionally enclosed by '"'          
 ( empno, ename,job,mgr,hiredate,sal,comm,deptno )
Run Code Online (Sandbox Code Playgroud)

emp1 table已存在于数据库中,test.csv中有9条记录

我从sqlldr执行了loader.ctl:

在此输入图像描述

现在,当我检查我的数据库时,我发现没有记录emp1...为什么会这样?提交之后为什么表中没有填充数据?

oracle oracle10g sql-loader

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

从查询中获取结果

CREATE TABLE TEMP25
(
  STATUS  VARCHAR2(200 BYTE)
);

Insert into TEMP25
   (STATUS)
 Values
   ('PENDING');
Insert into TEMP25
   (STATUS)
 Values
   ('ERROR');
Insert into TEMP25
   (STATUS)
 Values
  ('ERROR');
Insert into TEMP25
   (STATUS)
 Values
   ('ERROR');
Insert into TEMP25
   (STATUS)
 Values
   ('NOT_REQUIRED');
Insert into TEMP25
   (STATUS)
 Values
   ('NOT_REQUIRED'); 
Insert into TEMP25
   (STATUS)
 Values
   ('PENDING');
Insert into TEMP25
   (STATUS)
 Values
   ('PENDING');
Insert into TEMP25
  (STATUS)
 Values
   ('ERROR');
Insert into TEMP25
   (STATUS)
Values
  ('NOT_REQUIRED');
Insert into TEMP25
  (STATUS)
 Values
  ('ERROR');
Insert into TEMP25
   (STATUS)
 Values
  ('INVALID'); …
Run Code Online (Sandbox Code Playgroud)

sql oracle oracle11g

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

SQL查询逻辑

我有以下数据集

       a      b      c
      `1`     2      3
       3      6      9  
       9      2      11 
Run Code Online (Sandbox Code Playgroud)

如您所见,列a的第一个值是固定的(即1),但是从第二行开始,它会获取前一个记录的列c的值.

列b的值是随机的,列c的值计算为c = a + b

我需要编写一个sql查询,它将以上述格式选择这些数据.我尝试使用滞后函数编写,但无法实现.

请帮忙.

编辑:b只存在于表中,a and c需要根据值计算b.

Hanumant

sql oracle logic lag analytical

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

Oracle如何计算解释计划中的成本?

任何人都可以解释如何在Oracle解释计划中评估成本吗?是否有任何特定的算法来确定查询的成本?

例如:全表扫描,具有较高的性价比,索引扫描下... Oracle如何评估情况的 full table scan,index range scan等等?

此链接与我要求的相同:关于Oracle解释计划中的成本的问题

但是,任何人都可以用一个例子来解释,我们可以通过执行找到成本explain plan,但它如何在内部工作?

oracle performance oracle10g oracle11g query-tuning

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

Oracle SQL通过游标使用和单次提交有效地插入大型数据集

以下SQL生成具有相同模式的两个表之间的所有匹配记录,然后继续迭代存储此结果集的游标.我在这个函数的末尾用行提交逐行插入.我的问题是如何从这种类型的查询中获得最大的性能?代码如下:

BEGIN  
DECLARE    
   CURSOR foo IS  
        SELECT * FROM tableOne to  
        WHERE EXISTS (SELECT * FROM tableTwo tt  
                       WHERE TO.FOO = TT.FOO  
                       AND TO.BAR = TT.BAR);  --THIS TAKES 5 MINUTES (66 MILLION ROWS)
     BEGIN  
           FOR nextFoo IN foo  
     LOOP  
            INSERT INTO tracker t  
               (id,foo,bar,baz)  
            VALUES(trackerSequence.nextval, nextFoo.foo,nextFoo.bar,nextFoo.baz);  
     END LOOP;   
     COMMIT;  
     END;  
END;
Run Code Online (Sandbox Code Playgroud)

此查询可能需要一个多小时,我正在尝试减少与之相关的时间成本.我将处理一般的1.4亿条记录,所以我希望这个过程花费的时间加倍.所有列都已编制索引.

版本信息:

10克10.2

sql database oracle performance oracle10g

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

Oracle错误:ORA-00600:内部错误代码,参数:[13009],[5000],[1],[17],[1],[],[],[],[],[],[] ,[] ::

我在运行一个程序时遇到了一个奇怪的问题.

Proc如下所示:

procedure abc 
IS 
CURSOR xyz_cur IS
 SELECT x
       ,y
       ,z 
 from temp 
  where y IN ('abc'.'pqr'.'def','sql','pqw') 
for update nowait;
BEGIN

open xyz_cur ;
:
:

END abc;
Run Code Online (Sandbox Code Playgroud)

现在更早的光标查询没有'sql','pqw'.我已经用这两个varchar值扩展了这个IN语句.并且表temp在列y上有一个check constaint,我也扩展了check constaints.

现在我怎么能解决我的问题,它没有我最近添加的两个值,它运作良好.

我试过的,我已经分析了表并重建索引,但仍然没有运气.请帮助我

oracle plsql oracleinternals oracle11g

0
推荐指数
1
解决办法
7770
查看次数