複数の列を持つテーブルがあり、値からスペース値 (' ') を削除したいと考えています。クエリは次のとおりです。
update table
set column_name = trim(both ' ' from column_name)
where column_name like '% '
テーブルには約 55 の列が含まれているため、すべての列に更新ステートメントを記述する代わりに、おそらくループが実行可能なアイデアになるでしょう。
まず、ループが機能しているかどうかを確認しました。
declare
column_name varchar2(2048);
cursor pointer is
select column_name into column_name from user_tab_cols where table_name = 'TABLE_NAME';
begin
for x in pointer
loop
dbms_output.put_line(x.column_name);
end loop;
end;
はい、動作しています。dbms_output ウィンドウで列名を取得します。
さて、これが私がやろうとしていることですが、うまくいかないようです:
declare
column_var varchar2(2048);
cursor pointer is
select column_name into column_var from user_tab_cols where table_name = 'TABLE_NAME';
begin
for x in pointer
loop
update table_name
set x.column_var = trim(both ' ' from x.column_var)
where x.column_var like '% ';
commit;
end loop;
end;
残念ながら、これは機能していません。これは私が得るエラーです:
ORA-06550: line 11, column 18:
PLS-00302: component 'COLUMN_VAR' must be declared.
ORA-06550: line 11, column 16:
PL/SQL: ORA-00904: "X"."COLUMN_VAR": invalid identifier
ORA-06550: line 9, column 10:
PL/SQL: SQL Statement ignored
私がトラックから外れる場所について何か考えはありますか?
前もって感謝します :-)