ORacle Package

创建包时的错误记录:

CREATE OR REPLACE PACKAGE BODY Random IS 

BEGIN
v_Multiplier CONSTANT NUMBER:=1234324;
v_Increment CONSTANT NUMBER:=1;
v_Seed NUMBER := 1;

PROCEDURE ChangeSeed(p_NewSeed IN NUMBER) IS
BEGIN
v_Seed := p_NewSeed;
END ChangeSeed;

END Random;

报错信息如下: 

3/15     PLS-00103: Encountered the symbol "CONSTANT" when expecting one
         of the following:
         := . ( @ % ;


11/1     PLS-00103: Encountered the symbol "END" when expecting one of
         the following:
         begin function package pragma procedure form


错误点:

1

CREATE OR REPLACE PACKAGE BODY Random IS 

BEGIN

头部分多了一个 BEGIN 。所以一直报 END 有问题。


2.对于CONSTANT 的问题。

则应该是BEGIN 引起的连锁反应。

加BEGIN后,变量就要用 DECLARE 进行声明


包的初始化:

CREATE OR REPLACE PACKAGE BODY Random AS 
v_Multiplier number:=1234324;
v_Increment number:=1;
v_Seed number := 1;

PROCEDURE ChangeSeed IS
BEGIN
--v_Seed := 1;
dbms_output.PUT_LINE(v_Seed);
END ChangeSeed;

PROCEDURE ChangeSeed2 IS
BEGIN
v_Seed := 100;
dbms_output.PUT_LINE(v_Seed);
END ChangeSeed2;

BEGIN
dbms_output.PUT_LINE('haha');

END Random;

事实证明,这个包的运行方式的确很疼

对于每一个会话来说,第一次运行之后,包就被示例化了,尤其是其中的变量。

初始化部分只在第一次调用时运行,而且先于对其他成员的调用。


begin
begin
Random.ChangeSeed();
random.changeseed2;
end;
begin
Random.ChangeSeed();
random.changeseed2;
end;
Random.ChangeSeed();
random.changeseed2;
end;


上面的执行语句执行两次之后的结果如下

第一次

haha
1
100
100
100
100
100


第二次及第n次

100
100
100
100
100
100


只有重新编译之后,实例化才会无效。


包中的子程序声明与定义

声明和定义的函数头必须相同,不敢是参数名还是 参数类型及参数个数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值