EBS FORM:实现不同session间进行同一操作时,互相不干扰

实现不同session都可以进行同一操作:

这里以发送邮件举例,因为需要在界面上选中需要发送邮件的邮箱地址,不同session可能会需要向不同的邮箱发送邮件,所以需要实现不同session都可以发送邮件。解决方法如下:

一共三种方法,第一种很麻烦,第二种不严谨,第三种最好。

方法一:利用动态sql生成动态表---动态sql传参问题

此方法因为较麻烦,所以后来放弃

a)      步骤:建立sequence,附加到表名后面,并赋值给一个字符型变量,作为参数传入动态sql—create_table,执行语句为:

EXECUTE  IMMEDIATE  create_table;

同理,写增删改的动态sql,建立package,在Form中调用。
b) 问题:

在form中向动态表插入数据时,出现问题:

问题1: ORA-00936: 缺失表达式。

解决 1: 动态sql执行时,不会自动将空值的参数设置为null。因此form中传入的数据不可以为null。因此得给空值赋默认值。

问题2: ORA-00984: 列在此处不允许。

             解决2:因为execute会解析你的脚本直接运行,所有字符类型他不会帮你自动添加单引号。加引号的格式如下:

      insert_sql := 'insert into TEMPORY_EMAIL_57_T  values(' || p_header_id || ',''' || p_user_name || ''')';---2个引号

 

 

方法二:建全局临时表

步骤:在数据库中建一张全局临时表,实现只在当前session有效。

问题:当发送邮件时,会提交另外一个并发请求,此时,若邮件未发送完成,不能再对当前FORM有其他操作,否则将给临时表带来变动。

解决:见方法三。

 

方法三:建普通表,加一个session_id的字段

步骤:创建表,其中一个字段为session_id。

当打开form时,获取当前会话的session_id,并赋值给表中的session_id字段,获取session_id的sql如下:

SELECT b.object_id,a.session_id

 FROM v$locked_object a,

      dba_objects b  

 WHERE b.object_name='ZZOM_SEND_EMAIL';

转载于:https://www.cnblogs.com/CiWEi-/archive/2012/01/03/2311275.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值