首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以*格式显示行数据仅持续3位数字

如何以*格式显示行数据仅持续3位数字
EN

Stack Overflow用户
提问于 2022-06-14 05:17:53
回答 1查看 37关注 0票数 0

Oracle是否提供用于数据掩蔽的包或功能?例如,在开发环境中,为了保护数据,需要屏蔽表客户的信息。

代码语言:javascript
复制
create table customer (last_name varchar2(25), first_name varchar2(25), address varchar2(25));
insert into customer values('Doe', 'John', '10 someroad st');

在生产环境中,如果我们对客户进行选择,结果将是毫不意外的:

代码语言:javascript
复制
select *
from customer;

LAST_NAME FIRST_NAME ADDRESS
-------------- -------------- --------------------
Doe John 10 someroad st

在开发环境中,需要隐藏相同的信息,例如:

代码语言:javascript
复制
LAST_NAME FIRST_NAME ADDRESS
-------------- -------------- --------------------
Doe John 10 somerxxx st
EN

回答 1

Stack Overflow用户

发布于 2022-06-14 07:56:23

我做了一些类似的事情来掩盖数据。我创造了一个视图。您需要调整regexp_replace以满足您的需要。

代码语言:javascript
复制
CREATE TABLE CARDS_TBL (
  CARD_ID NUMBER
    GENERATED BY DEFAULT AS IDENTITY,
  CARD_STR VARCHAR2(16) NOT NULL,
  PRIMARY KEY (CARD_ID)
);

INSERT INTO CARDS_TBL(CARD_STR) VALUES('4024007187788590');
INSERT INTO CARDS_TBL(CARD_STR) VALUES('5432223398564536');
INSERT INTO CARDS_TBL(CARD_STR) VALUES('5430445512530934');
INSERT INTO CARDS_TBL(CARD_STR) VALUES('4020156755227854');
INSERT INTO CARDS_TBL(CARD_STR) VALUES('5431248766892318');


CREATE OR REPLACE VIEW CARDS AS
  SELECT
    CARD_ID,
    REGEXP_REPLACE(CARD_STR, '(^\d{3})(.*)(\d{4}$)', '\1**********\3') AS CARD_STR
  FROM CARDS_TBL;

CREATE OR REPLACE TRIGGER CARDS_TBL_TRG_INSERT
  INSTEAD OF INSERT ON CARDS 
  FOR EACH ROW
BEGIN
  INSERT INTO CARDS_TBL (CARD_STR) VALUES (:NEW.CARD_STR);
END;
/

INSERT INTO CARDS_TBL (CARD_STR) VALUES ('2222333344445555');

SELECT * FROM CARDS_TBL;

UPDATE CARDS_TBL 
  SET CARD_STR = '2222333344445566'
  WHERE CARD_ID = 6;
/

SELECT * FROM CARDS;

CARD_ID    CARD_STR
1    402**********8590
2    543**********4536
3    543**********0934
4    402**********7854
5    543**********2318
6    222**********5566


SELECT * FROM CARDS_TBL;

CARD_ID    CARD_STR
1    4024007187788590
2    5432223398564536
3    5430445512530934
4    4020156755227854
5    5431248766892318
6    2222333344445566
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72611837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档