我必须捕获插入语句的列名和列值,基于这 2 个输入,我需要计算一个唯一的列值(子分区)并将其分配给此插入,以便插入进入特定的子此表的分区。
masycq 回答:如何在 plsql 中的 table 语句上捕获插入,根据输入列名和列值计算唯一值
我不确定“捕获”INSERT
语句是什么意思。
在我看来,您应该自己编写它(INSERT
),使用动态 SQL。
我的数据库是 XE,它不支持分区,所以我宁愿不猜测它也不能测试它;当然,您会使用自己的语法。我正在使用 CASE 来决定某人的 COMM
列是否应该获得一个值;你也会这样做。
程序:
SQL> create or replace procedure p_test
2 (p_empno in varchar2,3 p_ename in varchar2,4 p_sal in number)
5 is
6 l_str varchar2(200);
7 begin
8 l_str := 'insert into test (empno,ename,sal,comm) ' ||
9 'values (' ||
10 p_empno ||','||
11 chr(39) || p_ename || chr(39) || ',' ||
12 p_sal ||','||
13 case when p_sal < 1000 then 100 else 0 end ||')';
14 dbms_output.put_line(l_str);
15 execute immediate l_str;
16 end;
17 /
Procedure created.
测试:
SQL> set serveroutput on;
SQL> exec p_test(1,'Little',750);
insert into test (empno,comm) values (1,750,100)
PL/SQL procedure successfully completed.
SQL> exec p_test(1,'Foot',2000);
insert into test (empno,2000,0)
PL/SQL procedure successfully completed.
SQL> select * From test;
EMPNO ENAME SAL COMM
---------- ---------- ---------- ----------
1 Little 750 100
1 Foot 2000 0
SQL>
,
@Littlefoot ,感谢插入 abc ('name','empid','partition_id') values ('nparab',10); partition_id=10 的值未知,它将根据名称和 empid 组合计算...我什至不知道传入的插入语句,我可以使用触发器来捕获传入的插入然后我可以传递列名和列值假设一个函数,该函数基于列名和列值的输入组合计算partition_id,该函数返回partition_id,该partition_id由传入的insert选择,以便insert语句根据partition_id进入各自的子分区