下表应该是我想要实现的输出。这意味着取决于column1中的值,即column2中的百分比和值。 column1将执行column2的百分比。像1000 = 800的80%,这将在第2记录的第2列中更改。
目前我的代码只能选择当前记录并插入另一个将复制相同记录的副本。但现在我需要计算并覆盖第2列值,具体取决于perentage。我没有把我的选择代码放在这里,因为我害怕你们都会感到困惑。我只在这里输入我的插入代码,请告诉我如何在代码中为column2感谢的百分比做公式。
Orginal 1st record-> column1 column2
80 1000
Inserted copy records which is 2nd record column1 column2
(what I want to achieved) 80 800
我的代码
INSERT INTO table1(column1,column2)VALUES(tran.column1,tran.column2);
答案 0 :(得分:1)
如果您不介意添加第三列,可以使用基于函数的虚拟列在Oracle 11或更高版本中快速完成此操作而无需触发器。
create table table1 (col1 integer, col2 integer, col3 as (col1 / 100 * col2));
SQL> insert into table1(col1,col2) values(80, 1000);
1 row created.
SQL> select * from table1;
COL1 COL2 COL3
---------- ---------- ----------
80 1000 800
SQL>
优点是保留原始值,因此如果更新COL1(百分比),或者更改公式,结果将重新计算。
否则,为每个行触发器创建一个BEFORE INSERT。
CREATE OR REPLACE TRIGGER ins_table1
BEFORE INSERT ON table1 cFOR EACH ROW
BEGIN
:NEW.col2 := :NEW.col1 / 100 * :NEW.col2;
END;
/
答案 1 :(得分:0)
如果您的数据已经存在于表中,您只需更新该行:
UPDATE table1
SET column2 = column1 / 100 * column2
WHERE table1.id = ...
如果您使用的是最近的数据库版本并且可以更改表格,我仍然会推荐@ mrjoltcola的解决方案。它更优雅,允许您查看计算所依据的值。此UPDATE语句如果运行多次,将导致您丢失column2的值。