1、查看当前用户使用的表空间情况,使用命令select from user_users即可,其中username标识用户名,default_tablespace表示默认的表空间。
2、查看oracle下面所有的表空间,使用命令select from Dba_Tablespaces即可,呈现的信息包括表空间名称以及表空间的大小。
3、表空间是非常重要的资源,如果我们想查看表空间的使用情况,比如表空间利用率等指标,首先我们查询的用户必须有dba权限,使用如下的命令查询即可。
4、查看表空间物理文件的名称、位置及大小信息,表空间文件通常以dbf的后缀方式存储。
5、有些查询表空间的语句需要执行用户需要高的权限,使用命令select from user_role_privs即可。
6、在查询到表空间的信息之后,我们有时需要删除没用的表空间,使用命令drop tablespace xxx including contents and datafiles;即可。
要对表中的字段进行遍历吗? 用user_tab_colsbegin
for i in (
select column_name from user_tab_cols where table_name=upper('表名'))
loop
dbms_outputput_line(icolumn_name);
end loop;
end;外循环i 从1取到100,内循环j 从1取到100。
你可以想象一下执行步骤:
①i=1
j从1取到100,result都不会等于500,故内循环完全执行。即下一个外循环之前的result应该是1100(i=1,j=100)。
②接下来:i=2,类似i=1,result<500,故最后打印出来的result=200
③一直到:i=5,result=500的时候内循环也执行完了。
④当i=6,7,8,9,ij永远不会等于500,故每次内循环都执行完毕才打印result,因此result依次等于600,700,800,900
⑤当i=10,内循环j=50的时候,result=500,这时候(exit when result=500),所以跳出本次内循环,接着执行下一个外循环i=11
⑥……等等 往下你可以思考一下,有哪些i会使内循环提前跳出?
对,很聪明,当i是500的约数的时候,内循环中会产生等于500的result,所以会提前跳出内循环。
同理,当ij=1000的时候跳出外循环,也就是整个循环。最早发生的应该是i=10,j=100,但i=10的时候,不等j取到100的时候result会取到500(i=10,j=50),因此这个被pass掉。
这种情况也要求i是1000的约数,由于500<1000,当i同时是500和1000的约数的时候,不等result=1000,result=500的时候就跳出内循环了,result是取不到1000的。
因此我们要找的是能整除1000而不能整除500的自然数里面最小的那个!
于是,i=40!
于是,当i=40,j=25的时候会跳出循环。上一个打印的时候i=39,j=100
其实嵌套循环就是循环里面套循环,这个只不过是加上了循环控制标识<<outer>>和<<inner>>(放在for前面,用于标记是哪个循环,里面的名字可以随便起),这样一来,我们就可以通过exit outer/inner…语句来控制跳出哪个循环了。使用loop循环,比如:\r\nfor item in (select a,b,c from table_a where 条件) loop\r\n insert into table_b(a,b,c) values (itema,itemb,itemc);\r\nend loop;\r\n也可以使用索引表循环,以上只是一个简单的例子,需要根据你的具体情况选择循环方式
你这个其实挺复杂的,要建立一系列的东西来满足你这个需求
给你做个实验吧
先建立一个表
create table test(id varchar2(20) not null primary key ,
name varchar2(100));
创建一个序列
create sequence seqTestincrement by 1
start with 1
maxvalue 999
nocycle
cache 10;
创建一个存储过程,这个很重要,每天半夜12点执行一次,这个主要是把序列重新置0用的,然后还需要定义一个job来调用这个存储过程
create or replace procedure p_seqas
n number(10);
v_sql varchar2(100);
begin
select seqTestnextval into n from dual;
n:=-(n-1);
v_sql:='alter sequence seqTest increment by'|| n;
execute immediate v_sql;
select seqTestnextval into n from dual;
v_sql:='alter sequence seqTest increment by 1';
execute immediate v_sql;
end;
然后创建一个触发器
create or replace trigger t_testbefore insert on test
for each row
begin
select to_char(sysdate,'yyyymmdd')||'_'||lpad(seqTestnextval,3,0) into :newid from dual;
end ;
存储过程我没测试,但是编译能过去
现在做个试验
执行这样一个语句
insert into test(name) values ('aa');然后你检查下数据,然后继续插入再看看
select from test;欢迎分享,转载请注明来源:内存溢出
评论列表(0条)