请教PL/SQL包的问题,不知是否发在这里

abcii 2014-01-22 11:00:31
最近要用到数据库,正在学Oracle,用PL/SQL建包的时候遇到了问题,不知是否发在这里,如果发错了请斑竹帮忙挪地方。

包类似于C++的类,我是按照类的思路做,但出现了问题,大概工作:
包定义里 有几个公有数据,使用时需要初始化或者通过函数改变
在包实现里 定义了一个私有函数 FUNC_If(v_Str varchar2)return number...
在包定义和包实现里 声明了一些公有函数和私有函数
这些函数要调用return:=FUNC_If()

问题1:调用处报错,必须声明,在哪里声明?或者根本就不能这么调用?
问题2:在包实现 里begin后加代码 是否就是初始化,相当于类的构造函数?这部分也要调用包内公有或私有函数,是否可以实现,怎么实现?
问题3:包的初始化过程,与类的初始化应该有所区别,请帮忙具体说明?
问题4:请帮忙讲解一下 类和包的区别。
就这些,请各位大神帮忙,万分感谢。
...全文
156 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcii 2014-01-22
  • 打赏
  • 举报
回复
1,当然定义了。。。 抓住本质好不啦,请告诉我包内公有和私有函数在包内怎么声明和调用,还是说这种用法用不了? 2,我的意思是包内的执行部分是不是相当于初始化,即构造函数?不是begin后边是什么。 3,再具体点,比如执行部分只是在初始化包实例化时执行? 4,请概述,百度能查到的东西我都已经查过,请告诉我百度差不到的。我觉得能做到简单几句就能把主要理论区别描述清楚,需要对这两种语言都有较深刻理解,很体现水平的哦。。。
引用 1 楼 Ghost_520 的回复:
感觉你基础的 sql 都不是很懂啊。 1. return:= FUNC_If() ; 你 return 定义没了啊 select FUNC_If() from dual ; 查询返回结果 2. 基本语法:(这叫 sql 代码块) declare -- 定义变量 return_temp varchar2(2000); -- 不要与关键字重名 begin -- 程序逻辑 return_temp := FUNC_If(); end; 3. 包的运行和类的又所差距, 包是从上至下运行 sql 块, 类是从构造函数先运行 4. 这个问题问下百度吧, 太理论了
Ghost_520 2014-01-22
  • 打赏
  • 举报
回复
感觉你基础的 sql 都不是很懂啊。 1. return:= FUNC_If() ; 你 return 定义没了啊 select FUNC_If() from dual ; 查询返回结果 2. 基本语法:(这叫 sql 代码块) declare -- 定义变量 return_temp varchar2(2000); -- 不要与关键字重名 begin -- 程序逻辑 return_temp := FUNC_If(); end; 3. 包的运行和类的又所差距, 包是从上至下运行 sql 块, 类是从构造函数先运行 4. 这个问题问下百度吧, 太理论了
abcii 2014-01-22
  • 打赏
  • 举报
回复
看来我没有说清楚啊,在重新描述一次: 1,包里的公有或私有函数调用 包内的共有或私有函数,怎么调用实现,或者就不能这么操作。 对应C++ 就是 成员函数调用其他成员函数 2,包体的执行部分 到底起什么作用?初始化? 3和4,做了几个实验,发现包和类有本质的区别, 类是一个包含方法的数据结构; 包就是一个组合或者分类,这个组合里有数据、过程和函数,这些不一定要有什么联系,没有类那样强大的功能。 类是通过实例化后的对象进行使用。 包本身就是一个“对象”,方法和数据都单独使用。。 不知道理解对不对。。
引用 3 楼 zlloct 的回复:
[quote=引用 2 楼 abcii 的回复:] 1,当然定义了。。。 抓住本质好不啦,请告诉我包内公有和私有函数在包内怎么声明和调用,还是说这种用法用不了? 2,我的意思是包内的执行部分是不是相当于初始化,即构造函数?不是begin后边是什么。 3,再具体点,比如执行部分只是在初始化包实例化时执行? 4,请概述,百度能查到的东西我都已经查过,请告诉我百度差不到的。我觉得能做到简单几句就能把主要理论区别描述清楚,需要对这两种语言都有较深刻理解,很体现水平的哦。。。 [quote=引用 1 楼 Ghost_520 的回复:] 感觉你基础的 sql 都不是很懂啊。 1. return:= FUNC_If() ; 你 return 定义没了啊 select FUNC_If() from dual ; 查询返回结果 2. 基本语法:(这叫 sql 代码块) declare -- 定义变量 return_temp varchar2(2000); -- 不要与关键字重名 begin -- 程序逻辑 return_temp := FUNC_If(); end; 3. 包的运行和类的又所差距, 包是从上至下运行 sql 块, 类是从构造函数先运行 4. 这个问题问下百度吧, 太理论了
[/quote] 在包头和包体里都定义了的函数或存储过程,在其他任何地方都可调用。 用法: 包名.函数名 包里面可以定义同名函数,通过参数的不同来区分使用函数。 至于你提到的一些在C++里概念我不是很懂,所以不会比较[/quote]
CT_LXL 2014-01-22
  • 打赏
  • 举报
回复
引用 2 楼 abcii 的回复:
1,当然定义了。。。 抓住本质好不啦,请告诉我包内公有和私有函数在包内怎么声明和调用,还是说这种用法用不了? 2,我的意思是包内的执行部分是不是相当于初始化,即构造函数?不是begin后边是什么。 3,再具体点,比如执行部分只是在初始化包实例化时执行? 4,请概述,百度能查到的东西我都已经查过,请告诉我百度差不到的。我觉得能做到简单几句就能把主要理论区别描述清楚,需要对这两种语言都有较深刻理解,很体现水平的哦。。。 [quote=引用 1 楼 Ghost_520 的回复:] 感觉你基础的 sql 都不是很懂啊。 1. return:= FUNC_If() ; 你 return 定义没了啊 select FUNC_If() from dual ; 查询返回结果 2. 基本语法:(这叫 sql 代码块) declare -- 定义变量 return_temp varchar2(2000); -- 不要与关键字重名 begin -- 程序逻辑 return_temp := FUNC_If(); end; 3. 包的运行和类的又所差距, 包是从上至下运行 sql 块, 类是从构造函数先运行 4. 这个问题问下百度吧, 太理论了
[/quote] 在包头和包体里都定义了的函数或存储过程,在其他任何地方都可调用。 用法: 包名.函数名 包里面可以定义同名函数,通过参数的不同来区分使用函数。 至于你提到的一些在C++里概念我不是很懂,所以不会比较

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧