PL/SQL语法

:= 赋值
= 等于
以分号结尾

匿名块
declare 定义变量(必须在此定义 先写变量名后写类型)
begin 程序正式操作(SQL)
Exception 错误处理
end; 程序结束
/ 运行


set serveroutput on size 1000000
dbms_output.put_line(值);

另一种数据类型方法
id stdu.id%TYPE;      -> id:变量名 stdu:表名 id:字段名
st stdu%ROWTYPE   -> 定义为表中一行所有的类型,相当于一个结构体
                              -> 调用时为:st.id     st.name     st.year
                              -> select * into st from stdu where id='5' 如果取出纪录则st.id,st.name
                              -> 等就有确切的值

游标cursor
语法:
(一)定义游标

CURSOR cursor_name
[(parameter_name[IN] datatype [{:=|DEFAULT} value]
[,(parameter_name[IN] datatype [{:=|DEFAULT} value] ..] )]
[RETURN returntype] is select_statment;
cursor_name:游标的名字
parameter_name:游标的SELECT语句中的参数
datatype:参数的数据类型
value:参数的默认值
returntype:游标的返回类型
select_statment:游标打开时将要执行的select语句
(二)打开游标
OPEN cursor_name[(parameter_value[,parameter_value ..')]
(三)从游标中取出数据
FETCH cursor_name INTO {record_name|variable_name[,variable_name]};
record_name:能和游标的select语句返回的数据类型相匹配的纪录
variable_name:变量的名字
(四)游标FOR循环
FOR record_name IN (select_statement) LOOP
    statements
END LOOP;
(五)参数
%ISOPEN
%ROWCOUNT
%FOUNT
%NOTFOUND
(六)WHERE CURRENT OF
在为了更新或删除游标选择的行而打开游标时,可在update或delete的where子句中使用
WHERE CURRENT OF cursor_name

1 定义 cursor cur is select * from table
2 打开 open cur
3 提取 fetch cur into st;  -> 提取一条纪录赋给st
4 关闭 close cur;
游标的两个属性 %Found:有纪录 %NOT Found:无纪录
while cur %Found Loop
    fetch cur into st;
End Loop;

包分为包头和包体(可以没有包头,一定有包体) 包体包括函数和过程
包头:create or replace package pack_name
       is/as
       function fun_name(参数)
       return number;
       end pack_name;
参数写法:参数名 in/out/inout类型  (in是输入参数)
function a(a in number(7), b out number(4))
调用时a(7, i); 注意:第二个参数不可以写数字,只能传变量

produce: 过程,没有返回值

包体:
create or replace package pack_name
body is/as
function fun_name() return number is/as
return number;
end pack_name;

定义数组
1 type 名1 is varry of 类型;
   名2 名1;   -> 名2为用时的数组名
   赋初值 名2 名1 := 名1(值);
2 数组的大小:数组.count
   判断值在数组中是否存在:数组.Exists(值) 有返回true,无返回false

   把一个空元素加到集合的LASTH位置:数组.extend
   把n个空元素加到集合的LASTH位置:数组.extend(n)
  
把元素i的第n个副本加到表的尾部:数组.extend(n,i)
   返回集合当前最大元素数量:数组.LIMIT
   删除整个表:数组.delete
   删除值为n的元素:数组.delete(n)

嵌入块
DECLARE
    PROCEDURE DO_NOTHING IS
    BEGIN
        NULL;
    END;
BEGIN
    BEGIN
        DO_NOTHING;
    END;
EXCEPTION
    WHEN OTHERS THEN
        BEGIN
            NULL;
        END;
END;

IF语句
IF experssion THEN
ELSEIF experssion
ELSE
END IF;

WHILE语句
WHILE experssion LOOP
END LOOP;

FOR语句
FOR counter IN [REVERSE] start_value .. end_value LOOP
END LOOP;
注意:使用REVERSE 循环执行过程会返回来,即从初值减到结束值

基本循环语句
LOOP
END LOOP;

EXIT语句
LOOP ......
    IF ....
        EXIT;
    END IF;
END LOOP;

WHEN语句
WHEN EXCEPTION [OR exception] THEN
WHEN OTHER THEN

创建过程的语法
CREATE [OR REPLACE] PROCEDURE
procedure_name [(parameter[{IN|OUT|IN OUT}]
datatype [,(parameter[{IN|OUT|IN OUT}]
datatype
[AUTHID{CURRENT_USER|DESIGNER}]
{IS|AS} [declarations]
BEGIN
    code
END;
AUTHID CURRENT_USER:利用调用权限执行该过程的一个关键字,利用权限也可以对数据库对象进行访问
AUTHID DESIGNER:利用用户的定义权限执行该过程的一个关键字;以用该权限也可以对数据库进行访问。
declaration:PL/SQL语言编写的过程代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值