我正在尝试创建一个小的PL \ SQL代码来删除表中的所有前导和结尾空格。我创建了2个文件,column_trimmer&停。 stop.sql只不过是一条消息,可以说是美好的一天。 column_trimmer有主代码。我需要的只是获取指定的表,然后获取该表中的所有列并删除前导和结束空格。这就是我到目前为止所拥有的......
ACCEPT column_name CHAR PROMPT 'Please specify the table name'
NEED CODE IN HERE TO GRAB TABLE NAME, THEN ALL COLUMNS IN IT AND APPLY IT TO THE CODE BELOW
UPDATE EWS_PHONE_SLX SET columnname = TRIM(columnname);
ACCEPT response CHAR PROMPT 'Task completed! Would you like to trim all columns in another table? '
SET TERM OFF
SELECT CASE LOWER('&&response.') WHEN 'yes' THEN 'column_trimmer' ELSE 'no' END AS script
FROM DUAL;
SET TERM ON
@&script
答案 0 :(得分:1)
这是一个小plsql程序(未经测试):
CREATE OR REPLACE PROCEDURE trim_all_columns(p_table IN VARCHAR)
AS
v_sql VARCHAR2(32767);
v_first BOOLEAN := true;
BEGIN
v_sql := 'UPDATE ' || p_table || ' SET ';
FOR c1 IN (
SELECT column_name
FROM user_tab_columns
WHERE table_name = p_table
AND data_type = 'VARCHAR2'
) LOOP
IF v_first = false THEN
v_sql := v_sql || ', ';
END IF;
v_sql := v_sql || c1.column_name || ' = TRIM(' || c1.column_name || ')';
v_first := false;
END LOOP;
EXECUTE IMMEDIATE v_sql;
END;
/
这里是一个名为" MY_TABLE":
的表的示例调用BEGIN
trim_all_columns('MY_TABLE');
END;
/
希望它有所帮助。