【发布时间】:2020-09-29 23:40:51
【问题描述】:
我正在尝试遍历 SQL 的列名以应用一些动态查询。但是,我在迭代这些列名时遇到了问题。
我总是有一个错误提示 通常是 PL/SQL 编译错误。
代码如下:
SQL 代码:
DECLARE
CURSOR c IS
SELECT COLUMN_NAME FROM ALL_COL_COMMENTS WHERE table_name='my_table_name';
BEGIN
FOR current_field IN c LOOP
dbms_output.put_line(current_field);
...Dynamic SELECT QUERY
new_string = new_string || ',' || current_field;
dbms_output.put_line(new_string);
END LOOP;
END;
最终目标是每次在sql查询中添加新字段并保存其结果时,计算我的观察次数。
伪代码:
current string = ''
result = array(len(all_field))
for current_field in all_field:
result[idx] = SQL_QUERY(current_string)
current_string = current_string + ',' + current_field
【问题讨论】:
-
你还没有定义
new_string;但是...Dynamic SELECT QUERY实际上在做什么?除了 ORA-06550“通常是 PL/SQL 编译错误”,您还看到了哪些其他错误。留言? -
两件事。您的意思是使用 ALL_TAB_COMMENTS 吗?它有效,但我相信更好的选择是使用 ALL_TAB_COLUMNS 或 USER_TAB_COLUMNS。每当使用以“ALL”开头的字典视图时,请始终指定所有者。如果另一个模式有同名的表,您将遇到麻烦。更好的是,如果您严格使用自己的模式,请指定 USER 而不是 ALL。用户视图没有所有者字段,因为它们只返回当前用户的记录。
-
... 动态 SELECT 查询本质上是按
new_string对列进行分组并计算行数。我正在遍历列,通过这样做我可以测量一些列的潜在值偏差,因为行数会增加。通常对于具有相同 ID 的所有行,所有值都应该相同,但事实并非如此,我需要发现未正确复制的变量。查询具有以下形式SELECT COUNT(*) As "AGG_" FROM (SELECT new_string FROM my_table GROUP BY new_string)
标签: sql oracle plsql dynamic-sql