ORACLE SQL:遍历表

时间:2018-06-27 14:08:27

标签: sql oracle loops plsql

我有一个包含表名列表的表。 我想逐一搜索这些表,以查看它们是否包含特定元素(主键,在脚本开始时指定)。 我想返回该元素存在的所有表的列表(理想情况下是不同的)。 对于这个PL / SQL“不仅仅是查询”的东西,我还很陌生。因此,对于您将要看到的残暴尝试,我提前表示歉意,但希望它能说明我的目的:

PROCEDURE CHECK_FOR_ELEMENTS
BEGIN
DECLARE 
ELEMENT_KEY varchar(5):=X78ehryfk;
RNUM_MAX int :=167;

----create output table for script
create or replace table ALL_TABLES CONTAINING_&ELEMENT_KEY 
(ELEMENT_KEY VARCHAR(255), 
TABLE_NAME varchar(255))
/
commit;

---begin loop over rnum;
FOR rnum_counter in 1..&RNUM_MAX
LOOP
--define this statement as variable TABLE_NAME_VAR
select table_name from (select * from (select table_name, rownum as rnum         
from all_tables
where owner = 'RMS'
and table_name like 'ABC%'
and table_name not like '%STG'
and table_name not like '%BKP'
and num_rows>0
order by num_rows desc)
where rnum = rnum_counter
)INTO TABLE_NAME_VAR
;
----run below to collect row, if it exists, from table being searched
SQL_STMT:='INSERT INTO ALL_TABLES CONTAINING_&ELEMENT_KEY 
SELECT distinct key,'||TABLE_NAME_VAR||' as UMF from         
'||TABLE_NAME_VAR|| 
' where key like 'ELEMENT_KEY-%'
execute immediate SQL_STMT;
commit;
---insert row into table created for output

END LOOP
---loop over all tables

END;

我得到的主要错误消息是TABLE_NAME_VAR在动态SQL语句中不是有效的表名。我已经用Google搜索了一下,现在我知道您不能以这种方式使用变量输入表名。

任何帮助将不胜感激! 谢谢!

1 个答案:

答案 0 :(得分:1)

在这里,我试图为您清理它。让我知道您是否仍然遇到错误。

@UiField DataGrid<MyDTO> grid = new DataGrid<MyDTO>();
final ListDataProvider<MyDTO> dataProvider = new ListDataProvider<>();

...
public void drawGrid(ArrayList<MyDTO> data) {
    dataProvider.getList().clear();
    dataProvider.getList().addAll(data);
    dataProvider.flush();

    dataProvider.addDataDisplay(grid);

    Column<MyDTO, String> dateCol = new Column<MyDTO, String>(new TextCell()) {

        @Override
        public String getValue(MyDTO object) {
            return object.getDate();
        }
    };

    // created other columns

    grid.addColumn(dateCol, "Date");    
    // added other columns

}