下面Insert语句认为,有3列另一个表的详细信息(ID,ins_dt,text_stuff)
INSERT INTO swpurge_config
(schema
,table_name
,table_alias
,driving_column
,deletion_predicate
,retention_period_type
,retention_period_value)
VALUES
('CUSTOMERS_OWNER'
,'LAST_NAMES'
,'LN'
,'ins_dt'
,'WHERE ln.ins_dt < SYSDATE - p_retention_period_value
AND ora_hash(ln.rowid, 8) = 1'
,'month'
,'6');
目的:我基本上是试图在一个VARCHAR2列中添加删除谓词。这个想法是在一个过程中,将删除记录多达1000行调用此列:
PROCEDURE delete_rows
(
p_schema IN VARCHAR2
,p_table_name IN VARCHAR2
,p_table_alias in varchar2
,p_retention_period_value IN VARCHAR2
,p_delete_predicate IN VARCHAR2
) IS
v_sql varchar2 (32000);
v_row_limit pls_integer (1000);
BEGIN
v_sql := 'delete from ' || p_schema ||'.'|| table_name ||p_table_alias
'older than '|| p_retention_period_value || p_delete_predicate;
dbms_output.put_line(v_sql);
END delete_rows;
不知道两件事情:1。如何存储SQL其中,在表列条款? 2.如何执行where子句作为过程的声明?
谢谢
你所谈论的动态SQL。
你可以将其存储里面VARCHAR2
字符串格式。然后检索它
select deletion_predicate into v_sql from swpurge_config where ...
然后
v_sql := "SELECT ...... FRom .... " || v_sql;
最后执行它
EXECUTE IMMEDIATE v_sql;
如果你的SQL语句中还包括参数,然后
EXECUTE IMMEDIATE query_str
using param1;