小编Jus*_*ave的帖子

如何限定触发器主体内的变量(PL/SQL)?

我可以在存储过程或函数的主体中显式限定变量:

create or replace
PROCEDURE ptest  AS
int_val INT;
BEGIN
  ptest.int_val:=0;
END;
/
Run Code Online (Sandbox Code Playgroud)

如何做同样的内部触发器?

 create table temp1(id int not null);

 create or replace trigger trg_before_insert_temp1 before insert  on temp1 for each row
declare int_val int;
 begin

   trg_before_insert_temp1.int_val := 0; -- PLS-00201, identifier must be declared

 end trg_before_insert_temp1;
 /
Run Code Online (Sandbox Code Playgroud)

trigger oracle plsql

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

如何使用备份文件知道数据库大小而不恢复它

无论如何,我们可以使用备份文件估计/知道数据库的大小而无需恢复它吗?

sql-server backup sql-server-2008-r2 database-size

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

是否可以在不完全扫描的情况下执行跳过 N 行并获取 M 行

假设我有这个查询:

SELECT EMP_ID,LAST_NAME FROM EMPLOYEES
   WHERE POSITIONID IN (1,3) ORDER BY POSITIONID,LAST_NAME;
Run Code Online (Sandbox Code Playgroud)

现在如果我只想显示 50 到 60 之间的前十行,我能想到的唯一方法是首先使用 ROWNUM 伪列运行上面的查询,然后从这个查询的结果中进行选择。像这样的东西:

SELECT EMP_ID,LAST_NAME FROM 
 (SELECT  ROWNUM RNUM,EMP_ID,LAST_NAME FROM
  (SELECT EMP_ID,LAST_NAME FROM EMPLOYEES
     WHERE POSITIONID IN (1,3) ORDER BY POSITIONID,LAST_NAME))
  WHERE RNUM BETWEEN 50 AND 60;    
Run Code Online (Sandbox Code Playgroud)

但是这样,我最终会首先获取职位为 1 或 3 的所有员工,然后提取其中的 10 行。我觉得这有点低效。有没有办法在不先进行全面扫描的情况下实现这一目标?

oracle optimization oracle-11g row

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