多表关联后如何通过游标访问不同表的列?
游标关联多表后访问指定列的方法
在你给出的PL/SQL代码中,直接通过joined_table_rec.col7就能访问table3(别名c)的col7列。
原因很直白:游标joined_table_cur的SELECT语句已经明确包含了c.col7,当定义joined_table_rec为该游标的%ROWTYPE时,这个记录变量会包含游标查询结果集中的所有列,列名就是SELECT语句里指定的名称(这里就是col7),和它来自哪个表无关。
补全后的可运行示例代码如下:
DECLARE CURSOR joined_table_cur IS SELECT a.col1, a.col2, b.col5, c.col7 FROM table1 a JOIN table2 b ON a.col1 = b.col1 JOIN table3 c ON b.col1 = c.col1; joined_table_rec joined_table_cur%ROWTYPE; BEGIN FOR joined_table_rec IN joined_table_cur LOOP -- 直接访问table3的col7列 DBMS_OUTPUT.PUT_LINE('table3的col7值:' || joined_table_rec.col7); END LOOP; END; /
如果不同表存在同名列(比如table1和table3都有col1),为避免混淆,建议在SELECT时给列起别名,示例如下:
DECLARE CURSOR joined_table_cur IS SELECT a.col1 AS t1_col1, a.col2, b.col5, c.col1 AS t3_col1, c.col7 FROM table1 a JOIN table2 b ON a.col1 = b.col1 JOIN table3 c ON b.col1 = c.col1; joined_table_rec joined_table_cur%ROWTYPE; BEGIN FOR joined_table_rec IN joined_table_cur LOOP -- 通过别名区分不同表的同名列 DBMS_OUTPUT.PUT_LINE('table1的col1值:' || joined_table_rec.t1_col1); DBMS_OUTPUT.PUT_LINE('table3的col1值:' || joined_table_rec.t3_col1); DBMS_OUTPUT.PUT_LINE('table3的col7值:' || joined_table_rec.col7); END LOOP; END; /
内容的提问来源于stack exchange,提问作者user11032180
相关产品推荐
相关产品推荐

