Oracle 甲骨文,用于西克尔,带一张dinamic表
嗨,伙计们 我的光标有问题,我找不到解决方案 我想在代码中做第二个循环,在代码中,我为上面找到的表动态循环,但返回错误PLS-00103:遇到符号“循环”。 我从pl sql开始 你能给我一些解决那个问题的建议吗? 谢谢Oracle 甲骨文,用于西克尔,带一张dinamic表,oracle,plsql,Oracle,Plsql,嗨,伙计们 我的光标有问题,我找不到解决方案 我想在代码中做第二个循环,在代码中,我为上面找到的表动态循环,但返回错误PLS-00103:遇到符号“循环”。 我从pl sql开始 你能给我一些解决那个问题的建议吗? 谢谢 CURSOR V_LIST_TABLES IS SELECT OBJECT_TYPE, OWNER ||'.'|| OBJECT_NAME AS SCHEMA, OBJECT_NAME FROM DBA_OBJECTS U WHERE OWNER = 'MYSCHEMA' AN
CURSOR V_LIST_TABLES IS
SELECT
OBJECT_TYPE,
OWNER ||'.'|| OBJECT_NAME AS SCHEMA,
OBJECT_NAME
FROM DBA_OBJECTS U
WHERE OWNER = 'MYSCHEMA'
AND OBJECT_TYPE IN ('TABLE');
BEGIN
FOR INDX_CURSOR IN V_LIST_TABLES LOOP
IF INDX_CURSOR.OBJECT_NAME LIKE '%TEST%' THEN
FOR INDX_CURSOR_2 IN ('SELECT * FROM' || INDX_CURSOR.OBJECT_NAME) LOOP
NULL;
-- DO SOMETHINGS
END LOOP;
END IF;
END LOOP;
你让这条路变得比需要的更复杂
vsql varchar2(200);
vfname varchar2(20);
vlname varchar2(20);
vdob date;
For x in (select owner,
table_name
from dba_tables
where owner = 'MYSCHEMA'
and table_name like '%TEST%'
)
loop
-- do something with x.owner and x.table_name
vsql := 'select fname, lname, dob into vfname, vlname, vdob from '||
x.owner||'.'||x.table_name;
dbms_output.put_line(vsql); -- debug only
execute vsql;
end loop;
在内部光标中,删除SELECT*from周围的单引号。使用引号,它只是一个字符串,而不是SELECT语句。EdStevens,如果我删除单引号,在错误为ORA-00903后,表名无效,因为表名是从变量传递的。在内部循环中,您将执行什么操作?当不同的表具有不同的列数和数据类型时,如果执行
select*
,则可能需要通过dbms\u sql
打开和处理内部游标。如果这只是一个占位符,可能有一种更简单的方法,使用executeimmediate
或更简单的方法。我应该在文件(UTL_文件)中写入与表关联的不同字段的值“is ORA-00903表名无效”,好吧,使用引号,您的IN列表不是查询的结果,它是字符串“SELECT*FROM”,连接到变量名.Hy,在变量vsql中,假设所有表都有相同的字段,但不是真的。