我有5到6個表格,其中我使用Excel文件插入數據,但我不知道最新的問題,但對於某些數據特殊字符正在添加,這給我的問題。所以他們是通過在某個過程中傳遞唯一Table_name來更新完整表的方法。目前我正在使用一個函數來更新列,但我想要更容易使用的東西(對於我的其他團隊成員)。 我正在使用下面的函數。從完整的表格中刪除特殊字符
create or replace FUNCTION pfm_on_varchar(
p_str IN VARCHAR2)
RETURN VARCHAR2
IS
o_str VARCHAR2(4096) := '';
asc_val NUMBER;
BEGIN
FOR I IN 1 .. LENGTH(p_str)
LOOP
asc_val := ascii(SUBSTR(p_str,i,1));
IF ((asc_val BETWEEN 48 AND 57) OR (asc_val BETWEEN 65 AND 90) OR (asc_val BETWEEN 97 AND 122)) THEN
o_str := o_str || chr(asc_val);
END IF;
END LOOP;
RETURN o_str;
END pfm_on_varchar;
,我怎麼能在一個過程傳遞表名和列名來更新表?我想這個代碼
CREATE OR REPLACE PROCEDURE removeSpecialChar(table_new IN varchar2, column_new IN varchar2)
AS
BEGIN
update table_new
set column_new = PFM_ON_VARCHAR(column_new);
end removeSpecialChar;
/
錯誤我得到
Error(4,3): PL/SQL: SQL Statement ignored
Error(4,10): PL/SQL: ORA-00942: table or view does not exist
爲什麼PLSQL ......你也可以在簡單的sql中做到這一點。只需在select語句中爲您獲取的特殊字符列表創建一個case語句,並將其替換爲null即可。 – XING
這個過程將非常緩慢,你逐個處理每個字符。爲什麼不試圖用字符集來解決問題? –
錯誤表明您的模式中沒有名爲'TABLE_NEW'的表。動態SQL需要「立即執行」和帶引號的字符串。 –