我有一个包含表名列表的表。 我想逐一搜索这些表,以查看它们是否包含特定元素(主键,在脚本开始时指定)。 我想返回该元素存在的所有表的列表(理想情况下是不同的)。 对于这个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搜索了一下,现在我知道您不能以这种方式使用变量输入表名。
任何帮助将不胜感激! 谢谢!
答案 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
}