pl/sql

程序化扩展语言

比如往表里面插入100万行数据就需要plsql

declare 变量声明

begin 程序主体

exception 例外处理

end; 程序结束


select 语句必须接into,且结果只允许返回单条记录,为空或为多条均报错

标识符就是一个对象,比如constant常量,variable变量,exception异常,cursor游标指针,可以存放多列的变量

program name:procedure,function,package,object type,trigger etc.

label reserved word


一个简单的plsql

create table emp as select * from scott.emp;

declare

ename varchar2(10):='KING';

begin

delete emp where ename=ename;

end;

select * from emp;

但会发现什么都没有,这就是plsql的一个特点:列名优先于变量名,它会先认为是列,所以全部删除了,而不是变量king


variable scope

get varscope.sql

declare

v_sal number(7,2):=80000; 7位数字,两位小数

v_comm number(7,2):=v_sal * 0.2

v_message varchar2(255):='No commission';

begin

 declare

 v_sal number(7,2):=60000;

 v_comm number(7,2):=0;

 v_total_comp number(7,2):=v_sal + v_common;

begin

 v_message:='From internal block'||v_message;

 dbms_output.put_line(v_total_comp);

 dbms_output.put_line(v_message); 输出字符类型的就用dbms_output.put_line()

 end;

 v_message:='From outer block'||v_message;

 dbms_output.put_line(v_message);

end;


还有一点需要注意的,下面语句中的commision_pct是奖金,奖金可能是null,所以我们要用到nvl

select avg(salary*nvl(commission_pct,0)) from hr.employees;


还有很多东西。。。在实际工作中,是开发人员应用的,dba用不到,慢慢再看吧。。





Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐