如何修剪string类型的所有表中所有行的所有列?

dav*_*lab 4 string oracle varchar plsql trim

在Oracle 10g中,有没有办法在PL/SQL中执行以下操作?

for each table in database
  for each row in table
    for each column in row
      if column is of type 'varchar2'
        column = trim(column)
Run Code Online (Sandbox Code Playgroud)

谢谢!

Dav*_*sta 6

当然,进行大规模动态更新可能会带来危险和耗时.但是这里是你如何生成你想要的命令.这是针对单个模式的,只是构建命令并输出它们.您可以将它们复制到脚本中并在运行之前查看它们.或者,您可以更改dbms_output.put_line( ... )EXECUTE IMMEDIATE ...让此脚本在生成时执行所有语句.

SET SERVEROUTPUT ON

BEGIN
  FOR c IN
    (SELECT t.table_name, c.column_name
       FROM user_tables t, user_tab_columns c
       WHERE c.table_name = t.table_name
         AND data_type='VARCHAR2')
  LOOP

    dbms_output.put_line(
                      'UPDATE '||c.table_name||
                      ' SET '||c.column_name||' = TRIM('||c.column_name||') WHERE '||
                      c.column_name||' <> TRIM('||c.column_name||') OR ('||
                      c.column_name||' IS NOT NULL AND TRIM('||c.column_name||') IS NULL)'
                     );
  END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)

  • USER_TAB_COLUMNS包含在表和视图中找到的列.要使其工作,您需要过滤掉视图. (2认同)