package变量使用的难题

[复制链接]
查看11 | 回复9 | 2007-10-20 08:38:44 | 显示全部楼层 |阅读模式
包头一个数组变量
包体有个函数,这个函数使用了包头的数组变量
当这个函数执行完之后,立刻清除包头的数组变量为空
这个函数在一个SQL里,可能被调用N次,比如 select func() from table;
同时在同一个session里,也可能有别的SQL在调用这个函数,要求不同的SQL之间不会出现数组变量值的冲突
谢谢
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
变量放到函数中定义呗
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
如果有并发的话,是否考虑使用局部变量,好处可能就是不会影响值,不好的地方编码混乱不易维护。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
package变量是为了共享;“当这个函数执行完之后,立刻清除包头的数组变量为空”,那就不如使用私用变量。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
谢谢
不知道咋说好
一个函数可能同时调用2次以上
比如 select func() from table; table 有2条记录
我希望这个函数能用包头的变量,然后第二次调用的时候,也能用包头的变量值
本次SQL执行完后,清除包头的这个变量值,
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
同一个SESSION中各SQL是按顺序执行的,没有并发问题。只需执行完SQL后清除变量。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
听你的说法,你似乎依赖于函数调用的顺序。这是很危险的假设。SQL中调用函数的顺序是不可控制的,加上ORDER BY也没用。我曾经在ASKTOM上问过他的。
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
原帖由 newkid 于 2009-8-12 10:21 发表
同一个SESSION中各SQL是按顺序执行的,没有并发问题。只需执行完SQL后清除变量。

谢谢,
同一个session中,不会同时运行2个SQL吗?确定?,运行完这个SQL后,怎么清除包头的变量呢?自动清除行吗?
另外,我如果这样呢 select func(),func() from table ?
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
也可以这么说,我要SQL一执行完,包头定义的数组就清除,且同一session不同SQL之间不能有冲突
而且 这样的时候 select func(),func() 也不能有冲突
回复

使用道具 举报

千问 | 2007-10-20 08:38:44 | 显示全部楼层
原帖由 newkid 于 2009-8-12 10:21 发表
同一个SESSION中各SQL是按顺序执行的,没有并发问题。只需执行完SQL后清除变量。

登陆到sqlplus,提交两个JOB,那么这两个JOB是在同一个session执行,还是2个session执行的呢?
如果是同一个session,那么这2个JOB里的SQL是先后执行的?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行