2016-08-29 454 views
-2

我想在取出一行表後取代列的所有字段。例如:如何在SQL select語句中使用replace替換列中的所有字段?

select * from employees; 

我想用'MASKED'字符串隱藏所有員工姓名。

我只知道用替換函數只替換一列的字段,但不是所有的字段。請幫忙。

+2

編輯您的問題,並提供樣本數據和期望的結果。 –

+0

據瞭解,您需要所有員工,但不需要名稱爲MASKED? –

+0

A **列**是一個「字段」 - 不知道你的意思是什麼*替換列的所有字段* ......或者你實際上是否想要看到*替換所有的列值**排***? .... –

回答

0
select employee_id, hire-date, 'MASKED' as employee_name, job, department, .... 

select聲明,您選擇的字符串常量「掩蔽的」,並給它的別名employee_name(或任何名稱要用於該列)。

0

不清楚爲什麼您需要首先從數據庫中獲取行,然後替換某個字段的值。這樣的過程只能分兩步執行:

  • 與SQL提取使用常規DML查詢(SELECT)數據
  • 過程在應用程序代碼

返回的行,沒有必要在應用程序級別添加不必要的複雜性時執行此操作。您可以通過創建視圖並直接選擇視圖而不是表格來實現所需的遮罩。然後,你需要一個掩飾機制來解決問題中的表列(在你的案例中是員工的名字)。

你可以使用REGEXP_REPLACE與任何屏蔽字符員工姓名替換字符,則可能需要使用(x或*)

SELECT REGEXP_REPLACE('employee name', '\w', 'x') FROM DUAL; 

REGEXP_REPLACE還支持regular expressions

因此,您的查詢可能會更改爲

select REGEXP_REPLACE(employee_name, '\w', '*'), field1, field2..... from employees; 

或者你認爲我可以預見你想首先把所有行,然後操縱員工姓名

Create Or Replace View employees_v As 
select REGEXP_REPLACE(employee_name, '\w', '*'), field1, field2..... from employees; 

一個原因也許是因爲你沒有「權力」從Select * from employees;

更改查詢

在這種情況下,您可以考慮使用Oracle Data Masking Pack(https://www.oracle.com/database/data-masking-subsetting/index.html)以獲得更全面的屏蔽機制(如果需要並且可能實施)。實現它在單個表上的單個列的開銷不值得。

相關問題