小编Jus*_*ave的帖子

Oracle中的触发器以及如何在回滚后保留记录

我需要创建一个在影子表中写入更改的触发器.我知道如何创建触发器但我的挑战是我需要新表中的记录即使在回滚后仍然存在.

这是输出结果的示例

INSERT INTO department VALUES (95, 'PURCHASING', 'CHICAGO');<br>
ROLLBACK;

1 rows inserted.
rollback complete.

SELECT * FROM department_log;

DEPARTMENT_ID           DEPARTMENT_NAME       ADDRESS               OPERATION_TIME            
---------------------- -------------------- -------------------- ------------------ 
90                      HR                    CHICAGO               03-NOV-11
95                      PURCHASING            CHICAGO               03-NOV-11

SELECT * from department WHERE department_id >= 90;

DEPARTMENT_ID           DEPARTMENT_NAME       ADDRESS              
---------------------- -------------------- -------------------- 
90                      HR                    CHICAGO
Run Code Online (Sandbox Code Playgroud)

oracle triggers oracle10g

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

如何在oracle中创建一个触发器,如果​​satrt date早于当前日期,将确保不删除任何记录?

我有一张桌子电影.

create table Movie
(
mv_id number(5),
mv_name varchar2(30),
startdate date
)
insert into Movie values(1,'AVATAR','8-MAR-2012');
insert into Movie values(2,'MI3','20-MAR-2012');
insert into Movie values(3,'BAD BOYS','10-Feb-2012');
Run Code Online (Sandbox Code Playgroud)

我想创建一个触发器,以确保如果satrt日期早于当前日期,则不会删除任何记录.我的触发器代码是 -

create  or replace  trigger trg_1
before delete
on Movie
for each row
when(old.startdate < sysdate)
begin
raise_application_error(-20001, 'Records can not be deleted');
end;
Run Code Online (Sandbox Code Playgroud)

触发器已创建.当我执行此代码以删除数据时 -

delete from Movie where mv_id=1;
Run Code Online (Sandbox Code Playgroud)

然后触发器触发但有错误,我不知道为什么我会收到这样的错误.我不想要任何错误,我只想要消息.这是错误 -

delete from Movie where mv_id=1
            *
ERROR at line 1: 
ORA-20010: Records can not be deleted
ORA-06512: at "OPS$0924769.TRG_1", line 3 …
Run Code Online (Sandbox Code Playgroud)

sql oracle sqlplus

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

如何在Apex中动态更新文本框?

例如

  • 我有一个下拉框,可以从桌子上找到一个小镇
  • 我想在它下面的文本框中找到选择城镇时的县.

它将从表中查看

例如,表格看起来像这样,所以使用townID它应该能够找到该县.

TownID || Town || County ||
Run Code Online (Sandbox Code Playgroud)

谢谢

sql database oracle ajax oracle-apex

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

你能解释一下这个正则表达式吗?

我是正规表达的新手,在学习中我在一些基本的困惑中,你可以解释这个表达

询问

SELECT REGEXP_REPLACE('Having fun with', '([a-z])+', 'A') FROM dual;
Run Code Online (Sandbox Code Playgroud)

结果:

HA A A
Run Code Online (Sandbox Code Playgroud)

询问

SELECT REGEXP_REPLACE('Having fun with', '([a-z])*', 'A') FROM dual;
Run Code Online (Sandbox Code Playgroud)

结果:

AHAA AA AA
Run Code Online (Sandbox Code Playgroud)

根据这些查询及其结果,我无法理解+和*之间的主要区别.

regex oracle10g regular-language

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

Oracle Analytics窗口

鉴于下表

PAYMENT_Date  TRANSACTION_TYPE     PAYMENT_AMT
1/1/2012      P                    184366     
1/1/2012      R                    -5841     
1/2/2012      P                    941
1/3/2012      P                    901
1/3/2012      R                    5841
Run Code Online (Sandbox Code Playgroud)

以及以下查询:

select  payment_date, transaction_type, payment_amt,
        SUM(payment_amt) OVER(ORDER BY payment_date, transaction_type 
            RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS RUNNING_BALANCE
from    TABLE;
Run Code Online (Sandbox Code Playgroud)

我得到这些结果:

PAYMENT_Date  TRANSACTION_TYPE     PAYMENT_AMT  RUNNING_BALANCE
1/1/2012      P                    184366       0
1/1/2012      R                    -5841        -184366
1/2/2012      P                    941          -178525
1/3/2012      P                    901          -179466
1/3/2012      R                    5841         -180367
Run Code Online (Sandbox Code Playgroud)

预期:

PAYMENT_Date  TRANSACTION_TYPE     PAYMENT_AMT  RUNNING_BALANCE
1/1/2012      P                    184366       0
1/1/2012      R                    -5841        184366
1/2/2012      P …
Run Code Online (Sandbox Code Playgroud)

sql oracle analytic-functions oracle-analytics

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

使用DBMS_JOB在Oracle中创建作业

我正在努力创造一个每个圣诞节都会运行某个程序的工作.这是我走了多远:

declare
   jobno number;
begin
   dbms_job.submit( jobno,
                   'BEGIN GiveCoins; END;',
                    to_date('12/25', 'MM/DD'),
                    'sysdate + ?');
end;
/
Run Code Online (Sandbox Code Playgroud)

然而,我似乎无法找到一个简单的方法来改变每年的间隔,我只是一般很困惑如何去做这个,任何帮助非常感谢

sql oracle dbms-job

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

列别名被截断

使用 SQL*Plus 我尝试使用 select union 语句来组合同一表中两列的结果,如下所示:

select substr(startdate,4,3) milestone 
  from projects 
union 
select substr(enddate,4,3) milestone 
  from projects
Run Code Online (Sandbox Code Playgroud)

使用列的别名milestone,但由于某种原因,结果显示为列名称mil。由于某种原因它被截断了,我认为这substr部分是问题所在,因为它从stardateandenddate列中获取了 3 个字符。我应该如何解决这个问题?

sql oracle sqlplus

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

在Oracle SQL中使用AVG()

我有一个名为Student的表格如下:

CREATE TABLE  "STUDENT" 
(   "ID" NUMBER(*,0), 
    "NAME" VARCHAR2(20), 
    "AGE" NUMBER(*,0), 
    "CITY" VARCHAR2(20), 
    PRIMARY KEY ("ID") ENABLE
)
Run Code Online (Sandbox Code Playgroud)

我想把所有年龄都大于平均年龄的学生记录下来.这是我试过的:

SELECT *
FROM student
WHERE age > AVG(age)
Run Code Online (Sandbox Code Playgroud)

SELECT * 
FROM student
HAVING age > AVG(age)
Run Code Online (Sandbox Code Playgroud)

两种方式都不起作用!

sql oracle average oracle11g

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

捕获触发DUP_VAL_ON_INDEX的值

鉴于此示例(DUP_VAL_ON_INDEX异常),是否可以捕获违反约束的值以便记录它们?

如果批量插入生成多个违规,方法是否相同?

BEGIN
  -- want to capture '01' and '02'
  INSERT INTO Employee(ID)
  SELECT ID
  FROM (
    SELECT '01' ID FROM DUAL
    UNION
    SELECT '02' ID FROM DUAL
  );

EXCEPTION
  WHEN DUP_VAL_ON_INDEX THEN
    -- log values here
    DBMS_OUTPUT.PUT_LINE('Duplicate value on an index');
END;
Run Code Online (Sandbox Code Playgroud)

oracle constraints oracle10g

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

如何使用toad将数据从一个数据库/表复制到oracle中的另一个数据库/表

我正在尝试将表格数据从开发框db复制到uat db,它们是2个不同的数据库.我正在尝试toad.All连接细节是正确的,但它不工作,并抛出以下错误.

[错误]执行(12:1):ORA-00900:无效的SQL语句

这就是我想要的

copy from abc/cde@//abc.abc.com:1521/devbox to abc/cde@//abc.abc.com/uatbox 
  INSERT TOOL_SERVICE_MAPPING (*) 
  USING (SELECT * FROM TOOL_SERVICE_MAPPING)
Run Code Online (Sandbox Code Playgroud)

oracle toad

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