Oracle 甲骨文,用于西克尔,带一张dinamic表

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

嗨,伙计们

我的光标有问题,我找不到解决方案

我想在代码中做第二个循环,在代码中,我为上面找到的表动态循环,但返回错误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'
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中,假设所有表都有相同的字段,但不是真的。