- 强文本 *``大家好,
我刚开始与甲骨文和尝试写一个脚本下面的问题陈述。
问题说明:我想对两个表执行对账表A和表B。基于标记为1的Map表中存在的字段。在本例中,我使用动态SQL来处理运行时列和连接条件,但我的查询没有给出任何输出。请给予我解决方案或其他任何方法,通过我可以在Oracle中执行此动态对账?
- 对账查询-注意--以下查询正在运行,没有任何错误,但没有给出任何输出。我不想使用Cursor打印结果,因为我有Million条记录。--代码
DECLARE
v_sql VARCHAR2(32767);
v_columns VARCHAR2(32767);
v_join_condition VARCHAR2(32767);
v_column_list SYS.ODCIVARCHAR2LIST;
v_result SYS_REFCURSOR;
BEGIN
SELECT LISTAGG(Column_name, ',') WITHIN GROUP (ORDER BY Column_name)
INTO v_columns
FROM MappIng_table
WHERE Flag = 1;
-- Split the column list into individual column names
v_column_list := SYS.ODCIVARCHAR2LIST();
v_column_list.EXTEND(REGEXP_COUNT(v_columns, ',') + 1);
FOR i IN 1..v_column_list.COUNT LOOP
v_column_list(i) := REGEXP_SUBSTR(v_columns, '[^,]+', 1, i);
END LOOP;
-- Build the join condition dynamically
v_join_condition := '';
FOR i IN 1..v_column_list.COUNT LOOP
IF i > 1 THEN
v_join_condition := v_join_condition || ' AND ';
END IF;
v_join_condition := v_join_condition || 'a.' || v_column_list(i) ||
'=b.' || v_column_list(i);
END LOOP;
v_sql := 'SELECT * FROM Table_A a full outer JOIN Table_B b ON ' ||
v_join_condition;
dbms_output.put_line(v_sql);
EXECUTE IMMEDIATE v_sql;
END;
1条答案
按热度按时间ohfgkhjo1#
相同的表将用于JOIN示例。用你的两张table代替。
据我所知,你的目标是:
Map表:
一些联接条件列:
个人加盟条件:
整个连接条件:
返回完整语句的查询: