oracle PL/SQL
declare(可选)
变量定义、光标定义
begin(必须)
程序体
exception(可选)
例外处理
end;
dbms_outpu.put_line(输出语句);
函数Function:
函数用于返回特定的数据,当建立函数时,在函数头部必须包含return子句。有且只有一个返回值。
变量:
建议以v_开头,在begin前,定义即可以赋值,v_data :=
变量类型:
%type,(引用表.字段类型),
%rowtype,类型的变量,它可以一次存储从数据库检索的一行数据
注意:如果定义了%rowtype类型的变量,该变量的结构与定义表的结构完全相同,查询时必须使用*或者列举全部的字段信息。
SQL> declare
row_data emp%ROWTYPE;
begin
select * into row_data from emp where empno='7369'; dbms_output.put_line(row_data.empno||'/'||row_data.ename||'/'||row_data.job);
end;
/
数据类型:
-
number
-
character
-
date/time
-
boolean
控制结构:
if条件then 执行语句1;
else 执行语句2;
end if ;
if 条件1then 执行语句1;
elsif 条件2then 执行语句2;
elsif ...then 执行语句;
else
end if;
desc 表名,查看表结构
like '%#_%' escape '#' ,(转义字符,让下划线不再表示为单个字符,为普通的字符串)
在单引号中的值严格区分大小写
单行函数:
1.字符函数:lower()小写,upper()大写,initcap()首字母大写
函数:
拼接:CONCAT (Hello','World')
提取字符('',下标从1开始,输出个数):SUBSTR ('EelloWorld',1,5)
字符长度(从1开始):LENGTE (HelloWorld')
字符首次出现的下标位置(从1开始):INSTR (HelloWorld',W')
左对齐(列名,输出个数,以左开始缺失的值用*补替):LPAD (salary,10,'')
右对齐(列名,输出个数,以右开始缺失的值用*补替):RPAD (salary,10,‘’)
字符首尾去除值('去除的值' from '目标字符'):TRIM('H' FROM 'HelloWorld')
字符替换('目标字符','替换字符','替换值'):REPLACE ('abcd','b','m')
数字函数:
ROUND:四舍五入 ROUND(45.926,2) 45.93
TRUNC:截断 TRUNC(45.926,2) 45.92
MOD:求余 M0D(1600,300) 100
日期函数:
日期的数学运算:在日期上加上或减去一个数字结果仍为日期两个日期相减返回日期之间相差的天数。日期不允许做加法运算,无意义可以用数字除24来向日期中加上或减去天数。
MONTHS_BETWEEN(,):两个日期相差的月数
ADD_MONTHS(,):向指定日期中加上若干月数
NEXT_DAY(,):指定日期的下一个星期对应的日期
LAST_DAY:本月的最后一天
ROUND:日期四舍五入
TRUNC:日期截断
通用函数:
NVL(expr1列名(此值为空时,用expr2),expr2);
NVL2(expr1,expr2,expr3):expr1不为NULL,返回expr2; 为NULL,返回expr3。
SELECT last name,job id,salary,
CASE job_id WHEN 'IT PROG' THEN 1.10+salary
WHEN 'ST CLERK' THEN 1.15*sa1ay
WHEN 'SA REP' THEN 1.20*sa1ay
ELSE salary
END
"REVISED SALARY"(别名)
FROM
employees;
SELECT last name,job id,salary,
DECODE (job_id,'IT PROG',1.10*salary,
'ST CLERK',1.15*salary,
'SA REP',1.20*salary,
salary)
REVISED SALARY(别名)
FROM
employees: