免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1269 | 回复: 3
打印 上一主题 下一主题

请教NYFOR等诸位大虾 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-21 19:43 |只看该作者 |倒序浏览
小弟在一个触发器内部想用DDL语句,形如alter table abc DISABLE constraint param_fk...之类,系统回答编译错误。NYfor老大提醒说要动态sql 加自治事务,我加了execute immediate 以后还是错,说什么“PLS-00103: 出现符号"IMMEDIATE"在需要下列之一时:
:=.(@%;
符号":=在"IMMEDIATE"继续之前已插入。”

是不是自治事务我没弄好?我该怎么写?自治事务的概念、例子网上基本没有有用的(google中文),请问可以赐教一下概念和用法吗?要不它英文是什么?我去鬼子那里看看。

谢谢。我快吐血了。。。。

论坛徽章:
0
2 [报告]
发表于 2003-04-21 20:34 |只看该作者

请教NYFOR等诸位大虾

看你的错误提示应该是你的数据库版本太低,execute immediate 需要8i以上的企业版或个人版。
你可以使用dbms_sql程序包。
示例:
create table t(id number primary key);
insert into t values(1);
commit;
insert into t values(1);

declare
  pragma autonomous_transaction;
  l_cur integer := dbms_sql.open_cursor;
  l_ret integer;
begin
  dbms_sql.parse(l_cur,'alter table t disable primary key',dbms_sql.native);
  l_ret := dbms_sql.execute(l_cur);
  dbms_sql.close_cursor(l_cur);
end;
/
insert into t values(1);
alter table t enable primary key;
select * from t;
delete t where rownum = 1;
alter table t enable primary key;
drop table t;
以上示例代码并没有写在trigger中,其用法一样。

警告:
由于我现在并不太清楚你如何操作那些表的数据,有一点必须告诉你。
除了在该trigger的自治事务中,你在主事务中不得有对alter 到的table有任何的dml操作,否则将会引起dead lock,因为dml会在表上放置tm锁定,不允许别的事务进行ddl操作。

论坛徽章:
0
3 [报告]
发表于 2003-04-22 09:18 |只看该作者

请教NYFOR等诸位大虾

对了,我忘记了,如果你的版本低于8i ,那么自治事务特性好像也是不可用的喔。

论坛徽章:
0
4 [报告]
发表于 2003-04-22 12:04 |只看该作者

请教NYFOR等诸位大虾

NYFOR兄,你真是活雷锋啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP