I am trying to execute the following statements from Perl script.

alter session set constraints=deferred

update acct_owner_01.account set acct_no = substr (acct_no,1,4) where cny# = 2058

while executing the last statement, I am getting the following error. If I execute the same from SQL*Plus, it works fine. Does anyone know why the statement fails and any possible workarounds?

DBD::Oracle::db do failed: ORA-02091: transaction rolled back
ORA-02292: integrity constraint (ACCT_OWNER_01.FK_ACCOUNTLABEL_ACCT_NO) violated - child record found (DBD ERROR: OCIStmtExecute) at ./tempmig.pl line 43.