简体   繁体   中英

How to solve this issue in pl/sql

How to create a trigger which interdicts insertion of symbols and space in a certain column and after insertion just to have only the upper letters

for example:

insert into tale xxx values '"&$))(/-$:&@@¥*|^]asjdj';

and the result should be the following:

ASJDJ

thank you

a lot of functions procedures trigger and nothing was right

Add a new column to the table and update that column extracting only the letters from the column with special characters. Using your eg.

Add new column value in tale table. Right after inserting the xxx column do the updates like:

update tale set value = upper(regexp_substr(xxx,'[[:alpha:]]+'));

That would be a row-level trigger which fires both before insert or update on table so that value is modified in any case. There are various options which let you remove everything but letters; regular expression is simple enough.

Sample table:

SQL> create table test (col varchar2(40));

Table created.

Trigger:

SQL> create or replace trigger trg_biu_test
  2    before insert or update on test
  3    for each row
  4  begin
  5    :new.col := upper(regexp_replace(:new.col, '[^[:alpha:]]'));
  6  end;
  7  /

Trigger created.

Testing:

SQL> insert into test (col) values ('"&$))(/-$:&@@¥*|^]asjdj');

1 row created.

SQL> select * from test;

COL
----------------------------------------
YASJDJ

SQL> update test set col = '25xyz';

1 row updated.

SQL> select * from test;

COL
----------------------------------------
XYZ

SQL>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM