批量修剪表格中的所有列

时间:2015-12-15 14:34:15

标签: plsql oracle-sqldeveloper

我正在尝试创建一个小的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

1 个答案:

答案 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;
/

希望它有所帮助。