关于Oracle Toad功能的Execute As Script执行逻辑(方法原理)

---这个是我注册表格的时候碰到一个奇怪的问题以及原因还有解决办法。

我先用AD_DD.REGISTER_TABLE注册了表格XYG_MANUFACTURE_NEED:EXECUTE AD_DD.REGISTER_TABLE('XYG','XYG_MANUFACTURE_NEED','T');
接着,用Toad的Execute As Script想批量注册表格行的时候,老是报一个错误:
执行语句:EXECUTE AD_DD.REGISTER_COLUMN('XYG','XYG_MANUFACTURE_NEED','NEED_ID',1,'NUMBER',38,'N','N');
报错:ORA-20000: Table XYG_MANUFACTURE_NEED does not exist in FND_TABLES for application_short_name "XYG" application_id "20003".
ORA-06512: at "APPS.AD_DD", line 375ORA-06512: at line 1

但是,非常奇怪的是,我单独在Toad里面单行执行,就是可以正常的:

EXECUTE AD_DD.REGISTER_COLUMN('XYG','XYG_MANUFACTURE_NEED','NEED_ID',1,'NUMBER',38,'N','N');
这样子就奇怪了。
接着当然是往这个Pkg找原因,发现是下面这一句,是关键:
当直接执行的时候,返回1,当Execute As Script的时候,返回0行。
  select COUNT(*) --into p_table_id
    from  fnd_tables
    where application_id = 20003
      and TABLE_NAME = 'XYG_MANUFACTURE_NEED';
然后我直接用这个语句,然后用Execute As Script运行:
  select TABLE_NAME--into p_table_id
    from  fnd_tables
    where application_id = 20003
返回的结果:
TABLE_NAME                    
------------------------------
XYG_GETMATERIAL_HEADERS_ALL   
XYG_ITEM_COMBINATIONS         
XYG_ITEM_TP_B                 
XYG_JBW_MANU_NEED             
XYG_OE_VOUCHER_TYPES_T        
5 rows selected.
-----------------------------
上面明显没看到我刚刚新注册的表格XYG_MANUFACTURE_NEED。
至此,我就猜到原因了:原来是我在Toad里面运行AD_DD.REGISTER_TABLE注册表格XYG_MANUFACTURE_NEED之后,没commit导致。
-----------
---总结:--
-----------
经过刚刚的调试,总结:
其实也说到了Execute As Script的运行原理(我原来也没注意到这点),原理是,它会在Toad里面 新开一个Session会话,来执行每一个"分号;"的语句的代码。
注意,是新的会话哦。所以,当你在Toad当前的会话对数据做了一些修改,没提交(commit)的话,那新的会话当然是看不到commit之后的数据。
也就是说,某种情况下会报错。
所以,只需要提交Toad本身的会话即可。这点也必须要注意,否则会造成锁或者别的数据异常问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值