更新 table [PL/SQL 中每一行的一列,unix 脚本]

Update one column of each row in a table [PL/SQL, unix scripting]

我有一个有 12 列的 table:

table1:

1 2 3 4 5 6 7 8 9 10 11 12
abc 1 000 aaa zzz 2 234 OOO 00001 01 123 214
def 2 023 bbb yyy 4 345 PPP 00002 02 133 224
ghi 3 011 ccc xxx 6 456 QQQ 00003 03 143 234
jkl 4 112 ddd www 8 567 RRR 00004 04 153 244

我想在循环中使用第 3 列数据并从另一个 table 获取 'best match' 数据。

table2:

1 2 3 4
0 777 676 america
00 888 878 england
01 999 989 france
02 666 656 germany

第 3 列数据将在循环中被修剪,直到在 table2 中获取匹配项。

first row:
iter 1: table1 row1 col3=000 -- no match in table
iter 2: table1 row1 col3=00 -- return england, replace table1 row1 col12=214 with 'england'

updated row: abc,1,000,aaa,zzz,2,234,OOO,00001,01,123,england


second row:
iter 1: table1 row2 col3=023 -- no match in table
iter 2: table1 row2 col3=02 -- return germany, replace table1 row1 col12=224 with 'germany'

updated row: def,2,023,bbb,yyy,4,345,PPP,00002,02,133,germany

您需要做的是创建一个过程,然后在该过程中声明一个 cursor 以及一个 variable_c_row cursor_name%ROWTYPE

在程序中,这将是内容:

OPEN cursor_name

FETCH cursor_name INTO variable_c_row;

WHILE cursor_name%FOUND LOOP
    -- Declare a number variable (i)
    i := 0;
    -- Declare a varchar variable (match)
    match := variable_c_row.col3
    
    WHILE length(match) > 0 LOOP OR l_countryname IS NULL
      begin
        -- Declare a yourrow%ROWTYPE variable (l_countryname)
        SELECT col4 FROM table2 INTO l_countryname WHERE col1 = match;
        
        UPDATE table1 SET col12 = l_countryname;
      exception when no_data_found then null;
      end;

      i := i+1;
      match := substr(variable_c_row.cow3, 0, length(match)-i);
    END LOOP;
  FETCH cursor_name INTO variable_c_row;
END LOOP;

CLOSE cursor_name;

由于问题没有DDL或DML,我能提供的最多是一个广泛的答案,没有经过测试。