2
我正在使用Oracle PL/SQL。 我试图定义嵌套游标,这意味着第一个游标的输出应该是第二个游标的输入。更具体地说:第一个应该存储具有特定前缀的表格。第二个应该存储来自第一个表中所有表的属性的所有值。PL/SQL中的嵌套游标
这是我的代码片段。我希望它能让我的问题更加清楚:
DECLARE
var_table_name VARCHAR2(30);
var_dimension_key VARCHAR2(30);
CURSOR cur_all_dim IS
SELECT
table_name
FROM dba_tables
WHERE dba_tables.tablespace_name = 'USERS'
AND dba_tables.owner = 'DWH_CORE'
AND UPPER (dba_tables.table_name) LIKE ('%DIM%%')
AND UPPER (dba_tables.table_name) NOT LIKE ('%TEMP%')
AND UPPER (dba_tables.table_name) NOT LIKE ('%DEBUG%')
AND UPPER (dba_tables.table_name) NOT LIKE ('%LOG%');
CURSOR cur_dimension_key IS
SELECT dimension_key FROM var_table_name;
BEGIN
OPEN cur_all_dim;
LOOP
EXIT WHEN cur_all_dim%NOTFOUND;
FETCH cur_all_dim INTO var_table_name;
OPEN cur_dimensions_key;
LOOP
EXIT WHEN cur_dimensions_key%NOTFOUND;
FETCH cur_dimensions_key INTO var_dimension_key;
dbms_output.put_line (var_table_name);
dbms_output.put_line (var_dimension_key);
END LOOP;
CLOSE cur_dimension_key;
END LOOP;
CLOSE cur_all_dim;
END;
谢谢..我想我开始明白这应该是如何工作的。 但是“cur_all_dim”是在哪里定义的?定义已经在你的代码中消失了,但它已经被使用了。所以我得到了它没有被声明的错误。 – user3364656
我已经使用了[隐式游标](http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/static.htm#LNPLS99957)。游标变量对循环来说是本地的,与标准的程序性'FOR'循环类似(你不需要在'FOR IN IN 1..n'中声明'i')。 –
好吧,我明白这一点。但为什么我得到一个错误'CUR_DIMENSIONS_KEY'没有被声明? (PLS-00201) – user3364656