create or replace trigger login_off_info
after  logon on database 
Begin
   create table trigger_test(test int);
END;
就这一个语句,SHOW ERRORS:LINE/COL ERROR
-------- -----------------------------------------------------------
2/4      PLS-00103: 出现符号 "CREATE"在需要下列之一时:
         begindeclareexitforgoto
         ifloopmodnullpragmaraisereturnselectupdatewhile
         <an identifier><a double-quoted delimited-identifier>
         <a bind variable><<closecurrentdeletefetchlockinsertopen
         rollbacksavepointsetsqlexecutecommitforall
         <a single-quoted SQL string>

解决方案 »

  1.   

    两个可能的问题:1你的db是8i以下的,不支持系统级触发器2触发器中的代码是由pl/sql块构成的,plsql可以直接执行ddl语句吗?应该用动态sql吧
      

  2.   

    SQL> create or replace trigger system.set_current_schema after logon on database
              2  declare
              3    default_schema  varchar2(30);
              4  begin
              5    select schema_name into default_schema from system.default_schema where user_name = user;
              6    execute immediate 'alter session set current_schema = ' || default_schema;
              7  end;
              8  /        Trigger created.
      

  3.   

    create or replace trigger login_off_info
    after  logon on database 
    Begin
       execute immediate 'create table trigger_test(test int)';--grant create any table to new_user;
    END;
      

  4.   

    触发器创建成功,但是并没有执行,table 按trigger_test并没有创建
      

  5.   

    触发器创建成功,但登录后并没有建表trigger_test,也就是并没有触发,
    请问什么原因?
      

  6.   

    没用过这种类型的出发器,学习ing。。
    但每次登陆的时候都建立一个表???不如使用临时表好了。
      

  7.   

    在触发器中可以有ddl语句 但执行会出错 因为ddl语句有自动commit的功能
    但触发器中不能有commit
      

  8.   

    今天突然想到的   grant create table to your_user   create or replace trigger  login_off_info after  logon on database 
       declare
        pragma autonomous_transaction;  // 有这个就ok
       begin
        execute immediate 'create table trigger_test(test int)';
       end;
      

  9.   

    加了pragma autonomous_transaction;  也不行,表还是创建不了,另外
    'create table trigger_test(test int)’,里面好象要加“;”'create table trigger_test(test int);’
      

  10.   

    我今天又在我机子上试了一下
      1  create or replace trigger lg after logon on database
      2  begin
      3     execute immediate 'create table trigger_test(test int)';
      4* end;
    SQL> /触发器已创建SQL> connect lgone     //  我的用户 有dba的权限 trigger也是用它建的
    请输入口令:
    已连接。
    SQL> select object_name,object_type from user_objects;
    未选定行        //  建表失败SQL> grant create table to lgone;  // 一定要有这句***************
    授权成功。SQL> connect lgone
    请输入口令:
    已连接。SQL> select object_name,object_type from user_objects;
    OBJECT_NAME          OBJECT_TYP
    -------------------- ----------
    TRIGGER_TEST         TABLE     // 成功pragma autonomous_transaction; 可以不要 上次这里讲错了 数据库触发器一般是自动提交的  不过加上 触发器也可运行啊
    good  luck for you