我有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需要“立即执行”和带引号的字符串。 –