Plsql 如何计算列值的百分比,然后将该值插入列中

Plsql 如何计算列值的百分比,然后将该值插入列中,plsql,insert,oracle-sqldeveloper,percentage,Plsql,Insert,Oracle Sqldeveloper,Percentage,下表应该是我想要实现的输出。这意味着取决于第1列中的值(百分比)和第2列中的值。column1将占column2的百分比。如1000=800的80%,将在第二条记录的第2列中更改 目前我的代码只能选择当前记录并插入另一个副本,该副本将复制同一记录。但是现在我需要根据参数计算并覆盖第2列的值。我没有把我的选择代码放在这里,因为我害怕你们都会感到困惑。我只把我的插入代码放在这里,请告诉我如何在代码中计算第2栏的百分比,谢谢 Orginal 1st record->

下表应该是我想要实现的输出。这意味着取决于第1列中的值(百分比)和第2列中的值。column1将占column2的百分比。如1000=800的80%,将在第二条记录的第2列中更改

目前我的代码只能选择当前记录并插入另一个副本,该副本将复制同一记录。但是现在我需要根据参数计算并覆盖第2列的值。我没有把我的选择代码放在这里,因为我害怕你们都会感到困惑。我只把我的插入代码放在这里,请告诉我如何在代码中计算第2栏的百分比,谢谢

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列值@皮特·马洪