Plsql 如何计算列值的百分比,然后将该值插入列中
下表应该是我想要实现的输出。这意味着取决于第1列中的值(百分比)和第2列中的值。column1将占column2的百分比。如1000=800的80%,将在第二条记录的第2列中更改 目前我的代码只能选择当前记录并插入另一个副本,该副本将复制同一记录。但是现在我需要根据参数计算并覆盖第2列的值。我没有把我的选择代码放在这里,因为我害怕你们都会感到困惑。我只把我的插入代码放在这里,请告诉我如何在代码中计算第2栏的百分比,谢谢Plsql 如何计算列值的百分比,然后将该值插入列中,plsql,insert,oracle-sqldeveloper,percentage,Plsql,Insert,Oracle Sqldeveloper,Percentage,下表应该是我想要实现的输出。这意味着取决于第1列中的值(百分比)和第2列中的值。column1将占column2的百分比。如1000=800的80%,将在第二条记录的第2列中更改 目前我的代码只能选择当前记录并插入另一个副本,该副本将复制同一记录。但是现在我需要根据参数计算并覆盖第2列的值。我没有把我的选择代码放在这里,因为我害怕你们都会感到困惑。我只把我的插入代码放在这里,请告诉我如何在代码中计算第2栏的百分比,谢谢 Orginal 1st record->
Orginal 1st record-> column1 column2
80 1000
Inserted copy records which is 2nd record column1 column2
(what I want to achieved) 80 800
我的密码
在表1(第1列,第2列)中插入值(第1列,第2列) 如果您不介意添加第三列,在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;
/
如果表中已存在数据,则只需更新该行即可:
UPDATE table1
SET column2 = column1 / 100 * column2
WHERE table1.id = ...
如果您使用的是最新的DB版本,并且可以更改表,我仍然推荐@mrjoltcola的解决方案。它更加优雅,可以让你看到计算所依据的值。如果多次运行此UPDATE语句,将导致您丢失column2的值。如果数据不在表中,这将是我首选的解决方案。当然是前进的方向,但问题并没有规定DB的版本是11gR1或更高。我已经编辑了我的帖子,让它更清晰。不,表中不存在第二条记录,除非我使用插入代码。这意味着它不是更新。我想插入与第一条记录重复的第二条记录,但只会更改第二条记录的第2列值@皮特·马洪