随机取前10条不同的记录
Oracle有提供一个函数来实现取随机数:DBMS_RANDOM
SELECT DBMS_RANDOM.VALUE FROM DUAL;
返回0--1之间的随机数,因为DBMS_RANDOM是默认使用时钟作为种子,来实现取随机数的。
select * from(select * from hek_test_tb order by dbms_random.value(1,10)) where rownum<10
TRUNC函数
Oracle与SQL SERVER在日期比较方面有重大区别。
例:含有日期+时间的字段BEGINDATE与仅含有日期的字段在比较时ENDDATE。
SQL SERVER:BEGINDATE<=ENDDATE
ORACLE:TRUNC(BEGINDATE,‘DD‘)<=ENDDATE ORACLE必须先截断时间,然后再进行比较。如果没有这样做,这将会是一个巨大的BUG。
修改表的一些常用语法
添加列:alter table hek_test_headers add col_test number;
修改列:alter table hek_test_lines modify litem varchar(40) not null;
删除列:alter table hek_test_lines drop columns col_test;
重命名列:alter table hek_test_lines rename column col_test to col_test2;
添加主键:alter table HEK_TEST_LINES add constraint pk_test primary key (LINEID);
添加外键:alter table hek_test_lines add constraint fk_test foreign key(hid) references hek_test_headers(hid)
失效主键:alter table hek_test_lines disable constraint pk_test;
失效外键:alter table hek_test_lines disable constraint fk_test;
删除主键:alter table hek_test_lines drop constraint pk_test cascade;
删除外键:alter table HEK_TEST_LINES drop constraint fk_test;
舍入函数
三个舍入函数:round()、floor()、ceil()
Round():实现四舍五入,允许设置保留的位数,这个也最常用的四舍五入函数。
Floor():实现取整。一般的程序语言是整数除以整数,返回的仍是整数。PL/SQL想得比较多。
Ceil():实现近似值。Ceil会直接近似取整,如果想保留小数,就要自己动手写个函数了。
select 9/4 from dual;
select CEIL(9/4) from dual;
select round(9/4,0) from dual;
实现类似BREAK语句
在没有LOOP…END LOOP时,是不能使用EXIT的。但可以通过GOTO语句实现。
declare
t integer;
begin
t:=&t;
DBMS_OUTPUT.PUT_LINE('T='||t);
if t=1
then DBMS_OUTPUT.PUT_LINE('Goto!');
goto GOTOS;
else
DBMS_OUTPUT.PUT_LINE('NO Goto!');
goto NoGoto;
end if;
<> for i in 1..10 loop
DBMS_OUTPUT.put_line('i='||i);
end loop test;
<> NULL;
end;