我有一个表 A,其中有列A
它将表名作为值。
所有这些表都有一个公共列C
。我需要每个表的该列的最大值。
我尝试使用动态 SQL 但出现错误。请建议。
DECLARE
query1 VARCHAR2(100);
c_table VARCHAR2(40);
c_obj VARCHAR2(20);
Cursor cursor_a IS
SELECT a FROM A;
BEGIN
Open cursor_a;
LOOP
Fetch cursor_a INTO c_table2;
EXIT WHEN cursor_a%notfound;
query1 := 'SELECT max(object_ref) AS "c_obj" FROM c_table' ;
EXECUTE IMMEDIATE query1;
dbms_output.put_line('Maximum value: '|| c_table || c_obj);
END LOOP;
Close cursor_a;
END;
动态 SQL 无法看到您的 PL/SQL 变量:您需要向其传递一个可以在 SQL 引擎范围内执行的字符串。因此,您需要将表名称与语句的样板文本连接起来:
query1 := 'SELECT max(c) FROM ' || variable_name;
您还需要将查询结果返回到变量中。
这是它的工作原理(我从您的示例中删除了一些不必要的代码):
DECLARE
c_table VARCHAR2(40);
c_obj VARCHAR2(20);
BEGIN
for lrec in ( select a as tab_name from A )
LOOP
EXECUTE IMMEDIATE 'SELECT max(object_ref) FROM ' || lrec.tab_name
into c_obj ;
dbms_output.put_line('Maximum value: '|| lrec.tab_name
|| '='|| c_obj);
END LOOP;
END;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)