FUNCTION name [{parameter[,parameter,...])] RETURN datatypes IS [local declarations] BEGIN execute statements [EXCEPTION exception handlers] END [name]
NUMBER 1.0E-130-9.99E125 DEC DECIMAL DOUBLE PRECISION FLOAT INTEGERIC INT NUMERIC REAL SMALLINT 存储数字值,包括整数和浮点数。可以选择精度和刻度方式,语法: number[([,])]。 缺省的精度是38,scale是0.
declare v_comm_percent constant number:=10; begin update emp set comm=sal*v_comm_percent where deptno=10; end SQL> / PL/SQL procedure successfully completed.
SQL>
命名的程序与匿名程序的执行不同,执行命名的程序块必须使用execute关键字:
create or replace procedure update_commission (v_dept in number,v_pervent in number default 10) is begin update emp set comm=sal*v_percent where deptno=v_dept; end
SQL>/
Procedure created
SQL>execute update_commission(10,15);
PL/SQL procedure successfully completed.
SQL>
如果在另一个命名程序块或匿名程序块中执行这个程序,那么就不需要EXECUTE关进字。
declare v_dept number; begin select a.deptno into v_dept from emp a where job='PRESIDENT' update_commission(v_dept); end SQL>/ PL/SQL procedure successfully completed SQL>
控制结构
控制结构控制PL/SQL程序流程的代码行,PL/SQL支持条件控制和循环控制结构。
语法和用途
IF..THEN
语法:
IF condition THEN Statements 1; Statements 2; .... END IF
2、建一个和a表结构一样的空表 ----------------------------- SQL> create table b as select * from a where 1=2;
SQL> create table b(b1,b2,b3) as select a1,a2,a3 from a where 1=2;
3、察看数据库的大小,和空间使用情况 -------------------------------- SQL> col tablespace format a20 SQL> select b.file_id 文件ID, b.tablespace_name 表空间, b.file_name 物理文件名, b.bytes 总字节数, (b.bytes-sum(nvl(a.bytes,0))) 已使用, sum(nvl(a.bytes,0)) 剩余, sum(nvl(a.bytes,0))/(b.bytes)*100 剩余百分比 from dba_free_space a,dba_data_files b where a.file_id=b.file_id group by b.tablespace_name,b.file_name,b.file_id,b.bytes order by b.tablespace_name / dba_free_space --表空间剩余空间状况 dba_data_files --数据文件空间占用情况
4、查看现有回滚段及其状态 ----------------------------- SQL> col segment format a30 SQL> Select SEGMENT_NAME,OWNER,TABLESPACE_NAME,SEGMENT_ID,FILE_ID,STATUS FROM DBA_ROLLBACK_SEGS;
5、查看数据文件放置的路径 --------------------------- SQL> col file_name format a50 SQL> select tablespace_name,file_id,bytes/1024/1024,file_name from dba_data_files order by file_id;
6、显示当前连接用户 --------------------- SQL> show user
7、把SQL*Plus当计算器 ---------------------- SQL> select 100*20 from dual;
8、连接字符串 ----------- SQL> select 列1||列2 from 表1; SQL> select concat(列1,列2) from 表1;
9、查询当前日期 --------------- SQL> select to_char(sysdate,'yyyy-mm-dd,hh24:mi:ss') from dual;
10、用户间复制数据 ----------------- SQL> copy from user1 to user2 create table2 using select * from table1;
11、视图中不能使用order by,但可用group by代替来达到排序目的 ----------------------------------------------------------- SQL> create view a as select b1,b2 from b group by b1,b2;
12、通过授权的方式来创建用户 --------------------------- SQL> grant connect,resource to test identified by test;