找出哪个分区的表的数据(行数)最多...

--droptable par_rows purge;
--droptable hash_work purge;
createtable hash_work (val number(9)) partitionby hash(val)partitions 1000;
 
insertinto/*+append*/ hash_work selectround(dbms_random.value(1000,9999),0) from dual 
connectbylevel <1000000;
createtable par_rows(pn varchar2(10), prow number);
 
declare
p_name varchar2(10);
p_pos number;
p_table varchar2(10):='HASH_WORK';
p_rows number;
begin
for p_pos in 1..1000 loop
execute immediate 'selectpartition_name from dba_tab_partitions where table_name=''HASH_WORK'' and partition_position='||p_pos||''
into p_name;
execute immediate 'selectcount(*) from hash_work partition ('||p_name||')'
into p_rows;
insert into par_rows(pn,prow) values(p_name,p_rows);
endloop;
end;
 
select * frompar_rows where prow=(selectmax(prow) frompar_rows);

效率很低,暂时不知道更好的办法。

execute immediate 和后面的写在一行里面,要小心对象和字符串,对象用’||****||' ,字符串用 ''***''连接

分清哪个是对象哪个是字符串

execute immediate 直接执行,效率很低~ oracle不会再去理会这个对象是否存在,因此可以成功编译和执行

begin end 里面不能有select语句


你可能感兴趣的:(oracle,immediate,execute)