尽管有 Oracle 方面的经验,但我对 DB2 还是很陌生。我无法解决这个问题。我需要在父表中查找丢失的子记录。父表、子表和 join_key 都作为输入参数传递。
我已经在一个程序中尝试过这个能够实现这一点,但是管理员希望它在一个函数中,以便他们可以在选择语句中使用它并以表格格式获取结果。由于父表、子表和 join_key 作为输入参数,我无法将它们作为动态 sql 运行。
create or replace function missing_child_rec(PARENT_TBL VARCHAR(255),JOIN_KEY VARCHAR(255),CHILD_TBL VARCHAR(255))
RETURNS TABLE(Key VARCHAR(255))
LANGUAGE SQL
BEGIN
DECLARE V_SQL VARCHAR(500);
DECLARE C_SQL CURSOR WITH RETURN FOR S_SQL;
SET V_PARENT_TAB = PARENT_TBL;
SET V_KEY = JOIN_KEY;
SET V_CHILD_TAB = CHILD_TBL;
SET V_SQL = 'SELECT DISTINCT '|| JOIN_KEY || ' FROM ' || V_CHILD_TAB || ' A WHERE NOT EXISTS
(SELECT ' ||V_KEY || ' FROM ' || V_PARENT_TAB || ' B WHERE A.'||JOIN_KEY || '= B.'||JOIN_KEY ||' )' ;
PREPARE S_SQL FROM V_SQL;
OPEN C_SQL;
CLOSE C_SQL;
RETURN
END
当我尝试编译它时,它说准备是无效的,我什至尝试过立即执行,但这也给出了错误。你能帮我解决如何在 UDF 中使用动态 sql 或解决这个问题的替代逻辑吗