我对一张表INSERT时,TRIGGER调用一个存储过程..PROCEDURE的 作用是:从我要INSERT的动态产生的记录中取出数据,根据这些数据中不同的表名参数,创建不同的表,然后通过CURSOR.动态的向对应的表插入数据...
我现在的问题就是..运行的时候..走到插入数据的地方就报错::说表或视图不存在!!!!!!!!!!!!!...我知道.TRIGGER是自治事务..里面不能有COMMIT..不能有ALTER.CREATE...想不出解决办法了.....求教了!
我现在的问题就是..运行的时候..走到插入数据的地方就报错::说表或视图不存在!!!!!!!!!!!!!...我知道.TRIGGER是自治事务..里面不能有COMMIT..不能有ALTER.CREATE...想不出解决办法了.....求教了!
解决方案 »
- PL/SQL执行简单SQL非常慢,求助!
- sqlplus安装文件
- SQL语句
- 存储过程在被JOB调用时,重新编译被调用的存储过程,是否需要先断掉JOB并KILL掉正在执行的过程?
- PLSQL开发:如何动态读取字段值?
- oracle数据库自动提交如何设置(不是SQLPLUS中的autocommit)谢谢!
- ORACLE列名最大宽度是多少
- 请问:删除表中的记录,为什么表空间的占用率没有变化?
- 请问在那里可以下载到ORACLE的书籍
- Oracle返回纪录集有多少种方式???
- 求一类比功能:先SQL Server 2000中有OSQL.EXE文件,不知道Oracle 9.i里有没有这样的功能?
- 这个SQL怎么写?
如:SQL> create or replace procedure p_createview(v_sql varchar2)
2 as
3 pragma autonomous_transaction; --注意,此部分为独立事务处理
4 begin
5 execute immediate v_sql;
6 end p_createview;
7 /过程已创建。已用时间: 00: 00: 01.02
2、pragma autonomous_transaction。。我也用过了表没有COMMIT不能对它进行操作,,没有呀!
2 (val1 varchar2(10));
Table created.SQL> create or replace procedure prc_test_tri (v_sql varchar2) as
2 pragma autonomous_transaction;
3 begin
4 execute immediate v_sql;
5 end prc_test_tri;
6 /
Procedure created.SQL> create or replace trigger tri_test
2 before insert
3 on tbl_test_tri
4 for each row
5 declare
6 w_tblname varchar2 (100);
7 begin
8 if :new.val1 = 't1' then
9 w_tblname := 'table1';
10 elsif :new.val1 = 't2' then
11 w_tblname := 'table2';
12 end if;
13
14 prc_test_tri ('create table ' || w_tblname || ' (col1 varchar2(10))');
15
16 execute immediate 'insert into ' || w_tblname || ' col1 values (''' || :new.val1
17 || ''')';
18 end;
19 /
Trigger created.SQL> insert into tbl_test_tri (val1) values ('t1');1 row created.SQL> insert into tbl_test_tri (val1) values ('t2');1 row created.SQL> select * from tbl_test_tri;VAL1
----------
t1
t2SQL> select * from table1;COL1
----------
t1SQL> select * from table2;COL1
----------
t2当然,具体的逻辑还是要你自己写