【发布时间】:2018-03-23 16:57:29
【问题描述】:
如何从我从 SQL 语句中检索到的 column_name 中获取数据(即行)? (对于 PL/SQL 来说是全新的)。 这是我的代码:
create or replace procedure com_coll_cur
as
type comColcur is ref cursor;
com_col_cur comColcur;
sql_stmt varchar2(4000);
type newtab_field is table of comColcur%TYPE;
begin
sql_stmt :=
'select column_name from all_tab_cols where table_name in (''TAB1'', ''TAB2'') ' ||
'group by column_name having count(*)>1';
open com_col_cur for sql_stmt;
loop
fetch com_col_cur into newtab_field;
exit when com_col_cur%NOTFOUND;
end loop;
close com_col_cur;
end;
我在这里要做的是首先找到两个表之间的公共列。这部分只抓取 column_name 但我也想要那些公共列中的数据。因此,我使用光标“指向”该公共 column_name 并使用 loop(fetch) 来获取该公共 column_name 内的数据。最后,我想只用这些公共列的数据创建新表。
我对这里的一切都很陌生,任何帮助将不胜感激。
【问题讨论】:
-
“制作”新表是什么意思?你想创建一个新表吗?您只能在代码中使用动态 SQL 来做到这一点;这是一个高级主题(无论如何一般都不推荐);如果您对 PL/SQL “完全陌生”,则绝对不推荐。那么:“包含此列名+其数据”是什么意思?你的意思是在同一列吗?列名是 VARCHAR2;如果“内部数据”是 NUMBER、DATE 或 TIMESTAMP 怎么办?您想如何将字符串和 TIMESTAMP 数据“包含”在一起?
-
@mathguy 这也是我遇到的问题。我想根据游标的数据类型定义表的列数据类型。因此,如果游标抓取两个表之间的公共列并且数据类型恰好是日期,varchar2,数字,对于 col1,col2,col3 我想将这些公共列存储到新创建的表中,其中日期,varchar2,col1 的数字, col2,col3 数据类型。
-
正如您所写,光标不需要是动态的。您有一个返回列名列表的报告。我不知道“指向”是什么意思。