如何存储和调用从表列的SQL查询?

问题描述 投票:1回答:1

下面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子句作为过程的声明?

谢谢

oracle plsql
1个回答
1
投票

你所谈论的动态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;
© www.soinside.com 2019 - 2024. All rights reserved.