Oracle 下面查询的动态sql

Oracle 下面查询的动态sql,oracle,plsql,dynamic-sql,Oracle,Plsql,Dynamic Sql,有人能帮我把下面的查询转换成动态sql吗 我需要将下面的查询放在PL/SQL过程中 查找具有非活动BAC的客户的关系 CREATE TABLE INACTIVE_CUS_ID AS SELECT * FROM (SELECT CUST.CUSTOMER_ID , case when sum(case when NVL(BAC.ACCOUNT_STATUS,'A')='I' then 0 else 1 end ) >0 then 'Y' else 'N' end CUS_HAVE_LIVE_

有人能帮我把下面的查询转换成动态sql吗

我需要将下面的查询放在PL/SQL过程中

查找具有非活动BAC的客户的关系

CREATE TABLE INACTIVE_CUS_ID AS
SELECT * FROM
(SELECT
CUST.CUSTOMER_ID ,
case when sum(case when NVL(BAC.ACCOUNT_STATUS,'A')='I' then 0 else 1 end ) >0 then 'Y'
else 'N' end CUS_HAVE_LIVE_BAC_FLG ,
max(to_date(SUBSTR(NVL(BAC.UPDATE_TS,SYSDATE),1,10),'YYYY-MM-DD')) as LAST_BAC_CEASE_DATE
FROM
OPS$QDW.PSO_CUSTOMER CUST ,
OPS$QDW.PSO_CUST_BLNG_ACCT BAC    
where CUST.CUSTOMER_ID = BAC.CUSTOMER_ID GROUP BY CUST.CUSTOMER_ID)
where CUS_HAVE_LIVE_BAC_FLG ='N'
AND LAST_BAC_CEASE_DATE < SYSDATE -730;

您没有提到为什么要在过程中运行create table而不是直接使用SQL语句。您可能希望将参数传递给过程并在DDL中使用变量

我们不能在过程中直接运行DDL。您可以使用EXECUTE IMMEDIATE来实现此目的

在下面的示例中,该过程具有表名的参数和select语句中要使用的一些其他值

绑定参数可以用于带有USING关键字的值,但只有变量串联可以用于动态表名和列名

CREATE OR REPLACE PROCEDURE yourprocedure (p_table_name    VARCHAR2,
                                           p_arg1          VARCHAR2,
                                           p_arg2          NUMBER)
AS
BEGIN
   EXECUTE IMMEDIATE
         'Create table yourtablename as select col1,col2 from '
      || othertable
      || '  where somothercol1 = :x AND somothercol2 = :y'
      USING p_arg1, p_arg2;
END;
/

为什么要使用静态数据集而不是视图或只是执行查询来构建表?