用户登录  | 
首 页技术文章软件发布广告价格
当前位置:传奇游戏服务端下载站传奇站长论坛资源网站程序技术文章文章资讯游戏架设教程热血江湖技术

如何在触发器中得到触发的SQL语句?

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2014-10-04 10:25:39
想写一个由DDL触发的触发器,如何在触发器中得到这个DDL语句?
如果是一个由DML触发的触发器,能不能在触发器中得到这个DML语句呢?

  
这个问题没有人感兴趣么?

  
没看明白

  
SELECT osuser, username, sql_text from v$session a, v$sqltext b
where a.sql_address =b.address and username='uname';
试试

  
获得单个对象的DDL语句
set heading off
set echo off
set feedback off
set pages off
set long 90000
select dbms_metadata.get_ddl(‘TABLE’,’TABLENAME’,’SCAME’) from dual;
如果获取整个用户的脚本,可以用如下语句
select dbms_metadata.get_ddl('TABLE',u.table_name) from user_tables u;
当然,如果是索引,则需要修改相关table到index
获取视图脚本:
SEELCT DBMS_METADATA.GET_DDL('VIEW','YOURVIEWNAME') FROM DUAL;

  
beckhambobo(beckham
我试了,不行。
select dbms_metadata.get_ddl(‘TABLE’,’TABLENAME’,’SCAME’) from dual;
得到的是某张表的建表语句,而且要指定表名、方案名。
select dbms_metadata.get_ddl('TABLE',u.table_name) from user_tables u;


得到的是所有用户表的建表语句。
而我是想实现一个触发器,在用户修改任意一张表时,得到他修改表结构的ddl语句,触发器代码如下(现在客户的机器名、时间、oracle用户名都能够得到,就是不能得到用户该库结构的ddl语句,怎么办呐!!):
CREATE OR REPLACE TRIGGER "GZGUEST"."TRG_ALTER" AFTER
ALTER ON DATABASE declare
PM_NAME VARCHAR2(500);
PM_IP_ADDRESS VARCHAR2(500);
PM_USERNM VARCHAR2(500);
PM_HOST VARCHAR2(50);
PM_SESSIONID VARCHAR2(50);
PM_OSUSERNM VARCHAR2(50);
PM_SID NUMBER;
CURRENT_SQL VARCHAR2(500);
PM_SQLTXT VARCHAR2(2000);
PM_SQLADDR VARCHAR2(100);
INSTERR EXCEPTION;
BEGIN
  PM_NAME := 'ALTER';
  PM_SQLTXT:= '';
  SELECT DISTINCT(SID) INTO PM_SID FROM V$MYSTAT;
  SELECT SYS_CONTEXT ('USERENV', 'CURRENT_SQL') INTO CURRENT_SQL FROM DUAL;
  SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER') INTO PM_USERNM FROM DUAL;
  SELECT SYS_CONTEXT ('USERENV', 'HOST') INTO PM_HOST FROM DUAL;
  SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS') INTO PM_IP_ADDRESS FROM DUAL;
  SELECT SYS_CONTEXT ('USERENV', 'SESSIONID') INTO PM_SESSIONID FROM DUAL;
  SELECT SYS_CONTEXT ('USERENV', 'OS_USER') INTO PM_OSUSERNM FROM DUAL;
-- select TO_CHAR(dbms_metadata.get_ddl('TABLE','TEMP_SPACE','GZGUEST')) into CURRENT_SQL from dual;
select TO_CHAR(dbms_metadata.get_ddl('TABLE',u.table_name)) INTO CURRENT_SQL from user_tables u;
INSERT INTO GZGUEST.TEMP_CRONTAB (NAME,TM,USERNM,CLHOST,IPADDRESS,SESSIONID,ADTSESSIONID,OSUSERNM,SQLTXT,CURSORID)
  values(PM_NAME,SYSDATE,PM_USERNM,PM_HOST,PM_IP_ADDRESS,PM_SID,PM_SESSIONID,PM_OSUSERNM,PM_SQLTXT,CURRENT_SQL);
  EXCEPTION
     WHEN INSTERR THEN
       RETURN;
END;。
商业版发布站程序下载:发布站程序下载:

Tags:

作者:佚名
  • 好的评价 如果您觉得此文章好,就请您
      0%(0)
  • 差的评价 如果您觉得此文章差,就请您
      0%(0)

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
传奇资源网提供最新传奇开区一条龙版本下载,本站声明:只更新最新最好的传奇服务端分享给大家。